异步通信BIOS功能调用

| 收藏本文 下载本文 作者:yuan22

下面是小编为大家整理的异步通信BIOS功能调用(共含10篇),欢迎大家借鉴与参考,希望对大家有所帮助。同时,但愿您也能像本文投稿人“yuan22”一样,积极向本站投稿分享好文章。

异步通信BIOS功能调用

篇1:异步通信BIOS功能调用

异步通信BIOS功能调用

在PC系列机的ROMBIOS(操作系统基本输入/输出功能固化在ROM中的部分)中提供了异步通信功能,用户可通过INT14H软中断调用,该功能包含四项子功能。

1.功能O

用来初始化通信口。它的入口参数有3个:DX=通信口号(0为COMl,1为COM2),AH=0(功能号),AL=初始化参数。初始化参数的D7、D6和D5用来设置波特率,取值组合000~111依次对应110、150、300、600、l200、2400、4800和9600bps;D4和D3用来设置奇偶校

验:0、01、11分别表示无校验、奇校验和偶校验;D2位用来设置停止位:0和1分别表示使用1个和2个停止位。D1和DO用来设置数据位:10和11分别表示使用7个和8个数据位。

到功能0调用返回时,AH=通信口状态,AL=Modem状态。AH中除了最高位AH7用于表示超时外,其他位为线路状态寄存器LSR相应位的内容,其含义同LSR相应位。AH7~AH0为1依次表示超时,发送移位寄存器空,发送保持寄存器空,检测到中止字符,帧格式错,奇偶校验错,溢出错(上一个字符CPU还未取走,又收到一个字符),接收数据就绪(已收到一个字符)。AL为Modem状态寄存器MSR的内容,其含义同MSR相应位。AL7~ALO为l依次表示收到载波检测,收到振铃指示,收到数据设备就绪,收到允许发送,载波检测信号发生变化,振铃指示信号发生变化,数据设备就绪信号发生变化,允许发送信号发生变化,

例如置COMl为9600bps、8位数据位、1个停止位、无奇偶校验的8086/8088汇编语言程序段为:

MOVAH,0;调用INT14H的功能O

MOVAL,0E3H;9600,8,l,N

MOVDX,O;设置COMl

INT14H;调用BIOs的异步通信功能

2.功能1

用来向通信口写字符,即将待发送的字符写入发送保持寄存器。它的人口参数有3个:DX=通信口号(同功能0),AH=1(功能号),AL=所写字符。

功能1调用成功(即写入成功)时,AH7=0,AL的内容保持不变;调用失败时,AH7=1,AH6~AH0为LSR相应位的内容,含义同LSR,AL的内容不变。

3.功能2

用来从通信口读字符,即读取已收到的字符。入口参数只有两个:DX=通信口号(同功能0),AH=2(功能号)。

功能2调用成功时,AH7=0,AL=接收字符;调用失败时,AH7=1,AH6~AH0为LSR相应位的内容,含义同LSR,AL的内容不变。

4.功能3

用来读通信口的状态。它的入口参数也是两个:DX=通信口号(同功能0),AH=3(功能号)。

功能3调用返回时,AH=ISR的内容(含义同LSR),AL=MSR的内容(含义同MSR)。

篇2:BIOS里一些常用功能设置

这里只讲BIOS里一些常用的功能设置,不包括超频等哦 现在一般的电脑进入BIOS,都是开机按DEL键进入BIOS,但是也有些电脑进入BIOS不是按DEL,比如intel的主板 进入BIOS就是按F2,下面介绍一下一些笔记本进入BIOS的方法: 各品牌笔记本电脑进入BIOS方法 IBM(冷开机按F1,部分新型号可以在重新启动时启动按F1) HP(启动和重新启动时按F2) SONY(启动和重新启动时按F2) Dell(启动和重新启动时按F2) Acer(启动和重新启动时按F2) Toshiba(冷开机时按ESC然后按F1) Compaq(开机到右上角出现闪动光标时按F10,或者开机时按F10) Fujitsu(启动和重新启动时按F2) 绝大多数国产和台湾品牌(启动和重新启动时按F2或者按CTRAL+ALT+S)好了就进入BIOS的方法就讲到这里,下面将常用设置项。 请看图片1   Standard CMOS Features(标准CMOS功能设置) 第一项 这一项主要是设置时间,查看IDE设备,检查内存大小,查看软驱状态,还有一个是设置BIOS密码 必须设置的一项哦,这里只讲最常用的。 1.关闭软驱。 Standard CMOS Features 选中它按回车进入,然后Drive A这一项默认的是[1.44M, 3.5 in.]或者有的是[2.88M, 3.5 in.]选中它,然后按键盘上的page Down键调节到None,或者选中它按回车,用键盘光标选择 None。如果你的软驱有两个, 那也要将Drive B关闭,设置完后按F10按Y保存,重起电脑即可关闭软驱。详细请看图片2   2.检查BIOS有没有识别到IDE设备,请看图片3   3.关闭空闲的IDE设备,以达到加快开机速度的目的,请看图片4   第一项BIOS基本常用设置就讲到这里了 Advanced BIOS Features(高级BIOS功能设置) 第二项。 下面讲一下第二项最常用的设置。 1.关闭BIOS防毒保护。 Anti-Virus Protection 请看图片5   2.关闭BIOS内存自检 这一项有必要讲一下,有的朋友内存是512的。但是开机后那内存检测的数字一直在转啊转的,但是按任意键可以跳过,但是很麻烦。 设置成Disabled内存要自检三次,设置成Enabled自检就为一次,大大加快了开机速度。 详细请看图片6   3.设置BIOS第一启动 First Boot Device 这一项是设置BIOS的第一启动项,分为: 软驱Floppy 硬盘HDD-0 光驱 CDROM USB等 这个设置,也就是我们通常重装系统前,需要到BIOS里设置为光盘或者软盘启动的设置了, 大家详细看一下把设置方法详细请看图片7   4.设置num Lock灯常亮。 Boot Up NumLock Status(初始数字小键盘的锁定状态) 设置为“On”时,系统启动后,键盘右边小键盘是数字键状态;设置为“Off”时,是方向键状态。缺省值为“On”。 详细请看图片8   第二项常用BIOS就讲到这里。 下面讲 Integrated Peripherals(综合外部设备设置) 1.怎么样屏蔽集成声卡。 请看图片9   这项讲到这里。 Power Management Setup(电源管理设置) 这一项也只讲一点。 解决电脑关机变重起。 电脑在正常关闭时却自动重启,一般是由于主板电源管理出现问题所致。有些主板的电源管理部件,由于受布线设计和零件质量的影响,对电平信号的响应不是很精确。由于在主板切断电源的瞬间会产生一个瞬间高压,这个高压存在时间很短,对硬件产生的损坏作用极小,但是通常会使网卡、调制解调器等PCI设备产生一个微小脉冲。如果没有判定为噪音信号,且你的主板BIOS中开启了自动唤醒功能的话,主板就会检测到网卡等设备的外部连接请求,于是自动开机。这种原因是由于硬件引起的,所以单纯刷新主板BI0S是不能解决问题的。可以试着在主板BIOS中关闭自动唤醒功能试试。在BIOS中将Wake up by pci card和wake up by lan设为Disabled. 这一项设置详细请看图片10om/Tmp_updir/article/57/02/1_2koev__31323235662971.jpg border=0> Load Fail-Safe Defaults(载入最安全的缺省值) 和Load Optimized Defaults(装入最优化的缺省值) 这两项都可以使BIOS设置恢复到出厂设置,详细方法请看图片11    Set Supervisor Password(设置超级用户密码) 用户进入BIOS密码那一项就不说了,这一项设置了,开机后就需要密码,否则根本就无法进入系统。详细请看图片12    设置图片12后,在进入Standard CMOS Features(标准CMOS功能设置) 。然后选择security Option设置成setup 即可,默认的是system详细请看图片13   经过图片12和13里的设置,用户超级密码就设置好了,以后别人就不能乱进你的电脑了。可以保护自己的重要数据不受外人偷盗哦。 好了BIOS常用设置就讲到这里了,嘿嘿

篇3:异步串口通信 VC++Unix系统

//MyComm.h 多机控制 异步串口通信 class CMyComm { public: CMyComm; virtual ~CMyComm(); void PreOpenSetupQueue(DWORD dwInQueue, DWORD dwOutQueue); // size of input buffer, size of output buffer BOOL Open(int nPort, int nBaud); //默认无校验

//MyComm.h 多机控制 异步串口通信

class CMyComm

{

public:

CMyComm();

virtual ~CMyComm();

void PreOpenSetupQueue(DWORD dwInQueue, DWORD dwOutQueue);

// size of input buffer, size of output buffer

BOOL Open(int nPort, int nBaud);

//默认无校验,每个字节发送11个bit,异步方式,

//若设置校验后,校验错则字节被替换为0x7E

BOOL SetupQueue(DWORD dwInQueue, DWORD dwOutQueue);

// size of input buffer, size of output buffer

BOOL ResetParity(char Parity);//parity = 'N', 'O', 'E', 'M', 'S' 不区分大小写

//分别表示  no, odd, even, mark, space

// 在Open()前设置无效。

BOOL SendData(LPCVOID lpBuf, DWORD dwToWrite);

DWORD ReadData(LPVOID lpBuf, DWORD dwToRead);

void Close();

protected:

HANDLE m_hCom;

BOOL m_bOpened;

OVERLAPPED m_osReader;

OVERLAPPED m_osWriter;

DWORD m_dwInBuf;

DWORD m_dwOutBuf;

};

//////////////////////////////////////////////////////////

//MyComm.cpp

#include “stdafx.h”

#include “MyComm.h”

///////////////////////////////////////////

CMyComm::CMyComm()

{

m_bOpened = FALSE;

m_dwInBuf = 512;

m_dwOutBuf = 512;

m_hCom = NULL;

}

void CMyComm::PreOpenSetupQueue(DWORD dwInQueue, DWORD dwOutQueue)

{

m_dwInBuf = dwInQueue;

m_dwOutBuf = dwOutQueue;

}

BOOL CMyComm::Open(int nPort, int nBaud)

{

ASSERT(nPort >0 || nPort < 5 || nBaud >= 110 || nBaud <= 128000);

if( m_bOpened ) return TRUE;

char szPort[15];

char lpDef[15];

DCB dcb = {0};

dcb.DCBlength = sizeof(dcb);

wsprintf(szPort, “COM%d”, nPort);

wsprintf(lpDef, “%d,n,8,1”, nBaud);

m_hCom = CreateFile(szPort, GENERIC_READ | GENERIC_WRITE,

0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

if( m_hCom == INVALID_HANDLE_VALUE ) return FALSE;

FillMemory(&m_osReader, sizeof(OVERLAPPED), 0);

FillMemory(&m_osWriter, sizeof(OVERLAPPED), 0);

m_osReader.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

m_osWriter.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

int byteUsedTime = 14400 / nBaud +1;

COMMTIMEOUTS timeouts = {20 + byteUsedTime, byteUsedTime, 1000, byteUsedTime , 20};

dcb.fParity = TRUE;

dcb.fErrorChar = TRUE;

dcb.ErrorChar = '~';

if( m_osReader.hEvent == NULL || m_osWriter.hEvent == NULL

|| !SetCommTimeouts(m_hCom, &timeouts)

|| !BuildCommDCB(lpDef, &dcb) || !SetupComm(m_hCom, m_dwInBuf, m_dwOutBuf)) {

if( m_osReader.hEvent != NULL )

CloseHandle( m_osReader.hEvent );

if( m_osWriter.hEvent != NULL )

CloseHandle( m_osWriter.hEvent );

CloseHandle( m_hCom );

return FALSE;

}

m_bOpened = TRUE;

return m_bOpened;

}

BOOL CMyComm::SetupQueue(DWORD dwInQueue, DWORD dwOutQueue)

{

if (m_hCom == NULL) return FALSE;

m_dwInBuf = dwInQueue;

m_dwOutBuf = dwOutQueue;

return SetupComm(m_hCom, m_dwInBuf, m_dwOutBuf);

}

BOOL CMyComm::ResetParity(char Parity)

{

if (m_hCom == NULL) return FALSE;

DCB dcb;

dcb.DCBlength = sizeof( DCB );

if (!GetCommState(m_hCom, &dcb)) return FALSE;

BYTE cParity;

Parity = tolower(Parity);

switch (Parity) {

case 'o':

cParity = 1;

break;

case 'e':

cParity = 2;

break;

case 'm':

cParity = 3;

break;

case 's':

cParity = 4;

break;

default:

cParity = 0;

break;

}

dcb.Parity = cParity;

return SetCommState(m_hCom, &dcb);

}

BOOL CMyComm::SendData(LPCVOID lpBuf, DWORD dwToWrite)

{

TRACE(“SSSSSSSSSSSSS 00\n”);

if( !m_bOpened || m_hCom == NULL ) return FALSE;

DWORD dwWritten;

if (WriteFile(m_hCom, lpBuf, dwToWrite, &dwWritten, &m_osWriter)) return TRUE;

if (GetLastError() != ERROR_IO_PENDING)  return FALSE;

GetOverlappedResult(m_hCom, &m_osWriter, &dwWritten, TRUE);

TRACE(“SSSSSSSSSSSSS 11\n”);

return (dwToWrite == dwWritten);

}

DWORD CMyComm::ReadData(LPVOID lpBuf, DWORD dwToRead)

{

TRACE(“RRRRRRRRRRRR 00\n”);

if( !m_bOpened || m_hCom == NULL ) return 0;

DWORD dwRead;

if (ReadFile(m_hCom, lpBuf, dwToRead, &dwRead, &m_osReader) ) return dwRead;

if (GetLastError() != ERROR_IO_PENDING)  return 0;

if (WaitForSingleObject(m_osReader.hEvent, INFINITE) != WAIT_OBJECT_0 )

return 0;

if (!GetOverlappedResult(m_hCom, &m_osReader, &dwRead, FALSE) )

return 0;

TRACE(“RRRRRRRRRRRR 11\n”);

return dwRead;

}

void CMyComm::Close()

{

if (m_osReader.hEvent != NULL) CloseHandle( m_osReader.hEvent );

if (m_osWriter.hEvent != NULL) CloseHandle( m_osWriter.hEvent );

if (m_hCom != NULL)    CloseHandle( m_hCom );

m_bOpened = FALSE;

}

CMyComm::~CMyComm()

{

Close();

}

// main.cpp

char Buf[40];

int nArray[3];

CMyComn myCom;

UINT SendDataProc(LPVOID pParam);

void OnCommSendReceive()

{

myCom.PreOpenSetupQueue(12, 12);

if (!myCom.Open(2, 4800)) return;

//如果想改变校验位,在此位置,如:myCom.ResetParity('m');

FillMemory(Buf, 40, 0);

nArray[0] = 0;

nArray[1] = 17;

nArray[2] = 88888;

AfxBeginThread(SendDataProc, (LPVOID)(12));

TRACE(“EEEEEEEE\n”);

int nRead = myCom.ReadData(Buf, 12);

int* nA = (int*) Buf;

TRACE(“AAAAAAAAAAAAAA %d, %d %d %d\n”,nRead, nA[0], nA[1], nA[1]);

}

UINT SendDataProc(LPVOID pParam)

{

return myCom.SendData((LPVOID)nArray, (DWORD) pParam);

}

原文转自:www.ltesting.net

篇4:异步串行通信接口的IP核设计

异步串行通信接口的IP核设计

摘要:异步串行通信接口(SCI)因其结构简洁、使用方便,因而在各类MCU、DSP和MPU芯片设计中获得广泛的应用。本文给出一种以状态机为控制核心、以数据流为执行中心的异步串行通信接口IP核结构设计的通用方法。此方法已在笔者所设计的DSP芯片中得到验证。

关键词:SCI IP核设计 状态机 数据流

引言

目前,基于传统IC芯片的微电子应用系统设计技术正在转向基于知识产权(IP,Intellectual Property)核的片上系统(SoC,System on Chip)技术发展。另外,IC设计在国内的发展很快,各种规模的IC设计中心和公司不断出现。因此,IP核的设计已开始逐渐成为国内微电子系统设计的一项支撑技术。从应用功能角度划分IP核有两大类:微处理器IP核(如8位8051核、32位ARM核等)和各种接口IP核(如LCD控制器、各种串行总线接口IP核等)。本文以异步串行通信接口(SCI,Serial Communication Interface)接口IP核结构设计为例,说明SCI、UART、SPI、USB等接口IP核的设计方法。

SCI的通信方式采用标准NRZ格式来进行外设间的异步数字通信。因其结构简法,通常嵌入到DSP、MCU和MPU或外设控制芯片内部,作为芯片的一个接口功能模块。SCI通常由三个功能单元构成:波特率脉冲产生单元、发送单元和接收单元。其结构如图1所示。在SCI数据收发中,数据帧的数据格式要比地址帧的数据格式复杂得多。在不同的通信方式下,数据帧的格式是不同 的。为此在发送器和接收器中各引入了与数据帧格式相对应的状态机来实现数据流的控制。本文所介绍的就是基于这种设计思想的一种通用设计方法。

(本网网收集整理)

1 SCI数据发送单元

数据发送单元主要功能是完成数据的并/串转换及发送,同时产生发送标志位。其结构如图2所示,字符发送状态机如图3所示。下面简要介绍发送单元各功能模块及其状态转换。

(1)TXD时钟八分频器

对基于波特率时钟进行八分频,并输出两个基本脉冲―TXD_CLK_WORK(用于计数、移位等)和TXD_CLK_END(用于标志位的生成和数据流输出)。

(2)TXD状态寄存器

通过此状态寄存器设置通信控制寄存器2的两个控制位―TXEMPTY和TXRDY位,以表示数据写入SCI_TXBUF和启动发送过程。

(3)发送字符计数器

当字符状态机的输出状态为允许字符计数时,其开始对发送的字符计数。当计数器值等于编程的字符数时,输出TX_CHAP_REACH信号作为字符状态机激励,使之进入非字符输出状态。

(4)发送空闲线计数器

当字符状态机进入发送空闲线数据状态时,开始工作。当计数到一定值时,输出信号TX_IDLECOUT_REACH作为字符状态机激励,使之进入非空闲线数据计数状态。

(5)发送数据流的形成

在TXBUF2SHIFT的高电平脉冲作用下,在SCI_TXBUF中待发送数据,经过选择器选择指定位数的数据送入SCI_TXSHIFT低位,不足的高位清“0”。与此同时,TXWAKE数据也送到WUT寄存器,在地址位模式情况下,由ADDR_IDLE控制在WUT中形成地址位;并由SCI_TXSHIFT数据位、地址位和奇偶方式位三者逻辑或形成奇偶校验位。

(6)当前发送字符状态机

在启动、控制位、计数器溢出等激励作用下,实现发送字符状态的输出和转换。发送字符状态机的激励有:TXEMPTY(为“0”时启动TXD发送)、ADDR_IDLE(地址/空闲线模式选择位)、PARENA(奇偶校验使能位)、STOPBIT(选择1或2个停止位)、WUT(发送空闲位数据允许位)、TX_CHARCOUT_REACH(发送字符数目已够位)、TX_IDLECOUT_REACH(发送空闲数目已够位)。发送字符状态机(见图3)的状态有:1为帧停止位(1位),3为帧第1停止位(2位),5为帧第2停止位(2位),8位帧起始位

,9为待机状态,A为帧数据位,B为空闲线模式起始位,C为帧地址位,E为帧奇偶校验位,F为空闲线模式停止位,D为空闲线模式计数0~7。

2 SCI数据接收单元

数据接收单元的功能是完成串行数据接收及接收标志位的生成。其结构如图4所示,接收起始位检测和接收字符状态机如图5、图6所示。

接收单元各功能模块及状态转换说明如下。

(1)RXD时钟八分频器

对波特率时钟进行八分频,并保持其与所接收串行数据流的.字符同步。其输出两个时钟脉冲:RXD_CLK_WORK,用于计数、移位等;RXD_CLK_END,为数据流各种方式的停止位前一个字节时间段内提供脉冲。

图4 SCI数字接收单元

(2)起始位检测模块

是一种三位四状态机。其激励有两个:RXD_1_VALUE―接收的串行数据流激励;RXD_END_CHK―一次接收完毕的脉冲激励。其状态有如下几种(见图5):0(待机状态)、1(空状态)、2(空状态)、3(发现“1”到“0”的跳变状态)、4(输出时钟同步信号)、5(字符接收过程中输出RXD_CLK_AYN和RXD_START_DRV)。

(3)字符检测模块

主要功能是接收数据流。其在采样时钟驱动下数据流通过三个寄存器,随后在RXD_CLK_WORK脉冲作用下,三个寄存器的数据通过表决电路,把数据送到接收数据缓冲器RXD_VALUE中,为把数据送到移位寄存器RX_SHIFT做准备。

(4)当前接收字符状态机

用来标识当前所接收的数据是哪一种字符,以及在下一个RXD_CLK_WORK字符周期将转换到哪一种状态,并且根据当前接收字符的状态,驱动其它部件进行合适的操作。其激励有:RXD_START_DRV(RXD起始位有效激励)、RX_CHAR_REACH(RXD字符接收数目已够)、CCR3_ADDR_IDLE(地址/空闲线模式选择)、CCR5_PARENA(奇偶校验使能)。其状态(见图6)有:0(待机状态)、1(帧数据位)、2(帧起始位)、3(帧地址位)、4(帧奇偶校验位)、5(空状态)、6(帧停止位)。

(5)接收字符计数器

当接收字符状态机处于帧数据位阶段时,其开始计数;当与可编程的数据相同时,输出RX_CHAR_REACH给接收字符状态机。

(6)接收空闲线计数器

当处于待机状态时,开始计数器,当计数到一定时,输出一个脉冲,将RXSP1_RXWAKE置位为1;在下一个字符即将接收、读取SCI_RXBUF寄存器或SCI复位的情况下,RXST1_RXWAKE被复位为0。

(7)接收数据移位寄存器(SCI_RXSHIFT)

根据接收字符状态机的状态接收与检测的串行数据流,将所接收的正确数据送入SCI_RXBUF并置相应的标志,否则置出错标志。

(8)BRKDT间断检测计数器

当产生RXST4_FE帧错误时,开始工作。当RXD_VALUE为“1”时,其被复位;当RXD_VALUE为“0”时,表示没有数据接收,开始计数;当计到一定值时,输出计数满信号,此时间断检测标志RXST5_BRKDT被置位。

结语

综上所述,在各种串行接口IP核设计中,可将其内部单元结构划分为控制和执行两大部分。其中,控制逻辑的设计采用以单极或多级状态机为核心,并配合其各种激励单元的结构设计,可以做到结构清晰,并可实现较复杂的逻辑;执行机构的设计采用以控制逻辑输出的状态为中心,来设计数据选择器或数据分配器,可实现数据流的复杂流向(请见网络补充版:收集整理)。

篇5:异步串行通信接口的IP核设计

异步串行通信接口的IP核设计

摘要:异步串行通信接口(SCI)因其结构简洁、使用方便,因而在各类MCU、DSP和MPU芯片设计中获得广泛的应用。本文给出一种以状态机为控制核心、以数据流为执行中心的异步串行通信接口IP核结构设计的通用方法。此方法已在笔者所设计的DSP芯片中得到验证。

关键词:SCI IP核设计 状态机 数据流

引言

目前,基于传统IC芯片的微电子应用系统设计技术正在转向基于知识产权(IP,Intellectual Property)核的片上系统(SoC,System on Chip)技术发展。另外,IC设计在国内的发展很快,各种规模的'IC设计中心和公司不断出现。因此,IP核的设计已开始逐渐成为国内微电子系统设计的一项支撑技术。从应用功能角度划分IP核有两大类:微处理器IP核(如8位8051核、32位ARM核等)和各种接口IP核(如LCD控制器、各种串行总线接口IP核等)。本文以异步串行通信接口(SCI,Serial Communication Interface)接口IP核结构设计为例,说明SCI、UART、SPI、USB等接口IP核的设计方法。

SCI的通信方式采用标准NRZ格式来进行外设间的异步数字通信。因其结构简法,通常嵌入到DSP、MCU和MPU或外设控制芯片内部,作为芯片的一个接口功能模块。SCI通常由三个功能单元构成:波特率脉冲产生单元、发送单元和接收单元。其结构如图1所示。在SCI数据收发中,数据帧的数据格式要比地址帧的数据格式复杂得多。在不同的通信方式下,数据帧的格式是不同 的。为此在发送器和接收器中各引入了与数据帧格式相对应的状态机来实现数据流的控制。本文所介绍的就是基于这种设计思想的一种通用设计方法。

1 SCI数据发送单元

数据发送单元主要功能是完成数据的并/串转换及发送,同时产生发送标志位。其结构如图2所示,字符发送状态机如图3所示。下面简要介绍发送单元各功能模块及其状态转换。

(1)TXD时钟八分频器

对基于波特率时钟进行八分频,并输出两个基本脉冲―TXD_CLK_WORK(用于计数、移位等)和TXD_CLK_END(用于标志位的生成和数据流输出)。

(2)TXD状态寄存器

通过此状态寄存器设置通信控制寄存器2的两个控制位―TXEMPTY和TXRDY位,以表示数据写入SCI_TXBUF和启动发送过程。

(3)发送字符计数器

当字符状态机的输出状态为允许字符计数时,其开始对发送的字符计数。当计数器值等于编程的字符数时,输出TX_CHAP_REACH信号作为字符状态机激励,使之进入非字符输出状态。

(4)发送空闲线计数器

当字符状态机进入发送空闲线数据状态时,开始工作。当计数到一定值时,输出信号TX_IDLECOUT_REACH作为字符状态机激励,使之进入非空闲线数据计数状态。

(5)发送数据流的形成

在TXBUF2SHIFT的高电平脉冲作用下,在SCI_TXBUF中待发

[1] [2] [3]

篇6:android Volley网络异步通信框架的使用

1、下载volley.jar文件,并放置到android项目下的libs目录下

2、建立请求网络方法 代码如下: 复制即可用

public void connectUrl(String url) {

StringRequest stringRequest = new StringRequest(url,

new Response.Listener {

// 成功执行的方法

@Override

public void onResponse(String response) {

Log.d(“TAG”, response);

}

}, new Response.ErrorListener() {

// 失败执行的方法

@Override

public void onErrorResponse(VolleyError error) {

Log.e(“TAG”, error.getMessage(), error);

}

});

//这一步很关键!

mRequestQueue.add(stringRequest);

}

3、调用连接网络的方法

// Volley框架String url3 = “” + dsgjEdittext.getText() + “:8080/servlet/CancelTask”;connectUrl(url3);

4、请求成功

篇7:Word巧妙调用Excel“到语音”功能

在Excel中有一个“文本到语音”的功能,使用此功能可以完成语言校对,但是在Word2003中却没有此项功能,其实我们可以在Word中使用VBA代码调用Excel的“文本到语音”功能。

1.代码的编写

打开Word2003,点击“工具→宏→宏”菜单命令,这时出现“宏”对话框,将“宏”命名为“语音校对”,“宏的位置”设为“所有的活动模板和文档”。再点击[创建]按钮,此时出现“代码”窗口,在其中输入下面的代码:

Sub语音校对()

Excel.Application.speech.speakSelection‘朗读选中的单元格内容

EndSub

2.建立与Excel之间的联系

点击菜单栏上的“工具→引用”菜单命令,在出现的窗口中选瘛?icrosoftExcel11.0ObjectLibrary”项,再点击[确定]按钮,最后点击“文件→保存”菜单命令,

3.工具按钮的制作

通过点击“文件→关闭并返回到MicrosoftWord”菜单命令返回到Word界面,然后点击“视图→工具栏→自定义”菜单命令,出现“自定义”对话框,选中“命令”标签,在“类别”清单内点击“宏”,再将右边“命令”清单中的“Normal.NewMacros.语音校对”拖到菜单栏上,使之成为Word菜单栏上的一个菜单。

好了,现在可以选取一段文字,点击菜单栏上的“Normal.NewMacros.语音校对”项,是不是听到了朗读声?

篇8:python使用multiprocessing模块实现带回调函数的异步调用方法

作者:work24 字体:[增加 减小] 类型:

这篇文章主要介绍了python使用multiprocessing模块实现带回调函数的异步调用方法,实例分析了multiprocessing模块异步调用的相关使用技巧,需要的朋友可以参考下

本文实例讲述了python使用multiprocessing模块实现带回调函数的异步调用方法,分享给大家供大家参考。具体分析如下:

multipressing模块是python 2.6版本加入的,通过这个模块可以轻松实现异步调用

from multiprocessing import Pooldef f(x): return x*xif __name__ == ‘__main__‘: pool = Pool(processes=1) # Start a worker processes. result = pool.apply_async(f, [10], callback) # Evaluate “f(10)” asynchronously calling callback when finished.

希望本文所述对大家的Python程序设计有所帮助,

篇9:论异步串行通信接口的IP核设计论文

摘要:异步串行通信接口(SCI)因其结构简洁、使用方便,因而在各类MCU、DSP和MPU芯片设计中获得广泛的应用。本文给出一种以状态机为控制核心、以数据流为执行中心的异步串行通信接口IP核结构设计的通用方法。此方法已在笔者所设计的DSP芯片中得到验证。

关键词:SCI IP核设计 状态机 数据流

引言

目前,基于传统IC芯片的微电子应用系统设计技术正在转向基于知识产权(IP,Intellectual Property)核的片上系统(SoC,System on Chip)技术发展。另外,IC设计在国内的发展很快,各种规模的IC设计中心和公司不断出现。因此,IP核的设计已开始逐渐成为国内微电子系统设计的一项支撑技术。从应用功能角度划分IP核有两大类:微处理器IP核(如8位8051核、32位ARM核等)和各种接口IP核(如LCD控制器、各种串行总线接口IP核等)。本文以异步串行通信接口(SCI,Serial Communication Interface)接口IP核结构设计为例,说明SCI、UART、SPI、USB等接口IP核的设计方法。

SCI的通信方式采用标准NRZ格式来进行外设间的异步数字通信。因其结构简法,通常嵌入到DSP、MCU和MPU或外设控制芯片内部,作为芯片的一个接口功能模块。SCI通常由三个功能单元构成:波特率脉冲产生单元、发送单元和接收单元。其结构如图1所示。在SCI数据收发中,数据帧的数据格式要比地址帧的数据格式复杂得多。在不同的通信方式下,数据帧的格式是不同 的。为此在发送器和接收器中各引入了与数据帧格式相对应的状态机来实现数据流的控制。本文所介绍的就是基于这种设计思想的一种通用设计方法。

1 SCI数据发送单元

数据发送单元主要功能是完成数据的并/串转换及发送,同时产生发送标志位。其结构如图2所示,字符发送状态机如图3所示。下面简要介绍发送单元各功能模块及其状态转换。

(1)TXD时钟八分频器

对基于波特率时钟进行八分频,并输出两个基本脉冲―TXD_CLK_WORK(用于计数、移位等)和TXD_CLK_END(用于标志位的生成和数据流输出)。

(2)TXD状态寄存器

通过此状态寄存器设置通信控制寄存器2的两个控制位―TXEMPTY和TXRDY位,以表示数据写入SCI_TXBUF和启动发送过程。

(3)发送字符计数器

当字符状态机的输出状态为允许字符计数时,其开始对发送的字符计数。当计数器值等于编程的字符数时,输出TX_CHAP_REACH信号作为字符状态机激励,使之进入非字符输出状态。

(4)发送空闲线计数器

当字符状态机进入发送空闲线数据状态时,开始工作。当计数到一定值时,输出信号TX_IDLECOUT_REACH作为字符状态机激励,使之进入非空闲线数据计数状态。

(5)发送数据流的形成

在TXBUF2SHIFT的高电平脉冲作用下,在SCI_TXBUF中待发送数据,经过选择器选择指定位数的数据送入SCI_TXSHIFT低位,不足的高位清“0”。与此同时,TXWAKE数据也送到WUT寄存器,在地址位模式情况下,由ADDR_IDLE控制在WUT中形成地址位;并由SCI_TXSHIFT数据位、地址位和奇偶方式位三者逻辑或形成奇偶校验位。

(6)当前发送字符状态机

在启动、控制位、计数器溢出等激励作用下,实现发送字符状态的输出和转换。发送字符状态机的激励有:TXEMPTY(为“0”时启动TXD发送)、ADDR_IDLE(地址/空闲线模式选择位)、PARENA(奇偶校验使能位)、STOPBIT(选择1或2个停止位)、WUT(发送空闲位数据允许位)、TX_CHARCOUT_REACH(发送字符数目已够位)、TX_IDLECOUT_REACH(发送空闲数目已够位)。发送字符状态机(见图3)的状态有:1为帧停止位(1位),3为帧第1停止位(2位),5为帧第2停止位(2位),8位帧起始位,9为待机状态,A为帧数据位,B为空闲线模式起始位,C为帧地址位,E为帧奇偶校验位,F为空闲线模式停止位,D为空闲线模式计数0~7。

2 SCI数据接收单元

数据接收单元的功能是完成串行数据接收及接收标志位的生成。其结构如图4所示,接收起始位检测和接收字符状态机如图5、图6所示。

接收单元各功能模块及状态转换说明如下。

(1)RXD时钟八分频器

对波特率时钟进行八分频,并保持其与所接收串行数据流的字符同步。其输出两个时钟脉冲:RXD_CLK_WORK,用于计数、移位等;RXD_CLK_END,为数据流各种方式的'停止位前一个字节时间段内提供脉冲。

图4 SCI数字接收单元

(2)起始位检测模块

是一种三位四状态机。其激励有两个:RXD_1_VALUE―接收的串行数据流激励;RXD_END_CHK―一次接收完毕的脉冲激励。其状态有如下几种(见图5):0(待机状态)、1(空状态)、2(空状态)、3(发现“1”到“0”的跳变状态)、4(输出时钟同步信号)、5(字符接收过程中输出RXD_CLK_AYN和RXD_START_DRV)。

(3)字符检测模块

主要功能是接收数据流。其在采样时钟驱动下数据流通过三个寄存器,随后在RXD_CLK_WORK脉冲作用下,三个寄存器的数据通过表决电路,把数据送到接收数据缓冲器RXD_VALUE中,为把数据送到移位寄存器RX_SHIFT做准备。

(4)当前接收字符状态机

用来标识当前所接收的数据是哪一种字符,以及在下一个RXD_CLK_WORK字符周期将转换到哪一种状态,并且根据当前接收字符的状态,驱动其它部件进行合适的操作。其激励有:RXD_START_DRV(RXD起始位有效激励)、RX_CHAR_REACH(RXD字符接收数目已够)、CCR3_ADDR_IDLE(地址/空闲线模式选择)、CCR5_PARENA(奇偶校验使能)。其状态(见图6)有:0(待机状态)、1(帧数据位)、2(帧起始位)、3(帧地址位)、4(帧奇偶校验位)、5(空状态)、6(帧停止位)。

(5)接收字符计数器

当接收字符状态机处于帧数据位阶段时,其开始计数;当与可编程的数据相同时,输出RX_CHAR_REACH给接收字符状态机。

(6)接收空闲线计数器

当处于待机状态时,开始计数器,当计数到一定时,输出一个脉冲,将RXSP1_RXWAKE置位为1;在下一个字符即将接收、读取SCI_RXBUF寄存器或SCI复位的情况下,RXST1_RXWAKE被复位为0。

(7)接收数据移位寄存器(SCI_RXSHIFT)

根据接收字符状态机的状态接收与检测的串行数据流,将所接收的正确数据送入SCI_RXBUF并置相应的标志,否则置出错标志。

篇10:利用异步通信芯片16C552实现PC机与DSP的串行通讯

利用异步通信芯片16C552实现PC机与DSP的串行通讯

摘要:介绍了异步通信芯片16C552的功能、特点、结构和内部寄存器,给出了用16C552芯片实现PC机与DSP串行通讯的方法,同时给出了它们之间的硬件接口电路和软件初始化程序。

关键词:16C552;串行通讯;异步

当实现PC机与DSP的串行通讯时,通常可直接利用DSP的串行通讯接口(SCI)模块和SCI多处理器通讯协议(即空闲线路模式和地址位模式)来在同一串行线路中实现多个处理器之间的通讯,也可以采用SCI异步通讯模式实现串行通讯。这两种方式虽然都能方便地实现串行通讯,但它们都需占用系统较多的硬件和软件资源,(本网网收集整理)因而不适用于对实时性要求比较高且系统资源紧张的应用场合。笔者在研制电力有源滤波实验系统中,由于采用了异步通讯芯片16C552,从而成功解决了这个问题。本文将从电路结构和软件编程两个方面介绍该方案的实现方法。

1 16C552简介

1.1 功能特点及结构框图

16C552是TI(TL16C552)和VLSI(VL16C552)等公司生产的异步通信芯片,具有两个增强的通用异步通讯单元通道和一个增强的双向打印机端口;支持TL16C450和FIFO两种模式,其16字节的FIFO可减少CPU中断;每个通道都具有独立的发送、接收、线路状态和设置中断功能,同时具有独立的MO-DEM控制信号、可编程的串行数据发送格式(包括数据位长度、校验方式、停止位长度)和可编程波特率发生器;另外,每个通道的数据和控制总线还具有三态TTL驱动功能。

TL16C552AM是TI公司的68脚PLCC(Plastic Leaded Chip Carrier)封装芯片,其管脚及功能框图如图1所示。从图中可以看出,它的串行口主要完成两个功能,一是把外设或调制解调器接收来的串行数据转换成并行数据;二是把CPU的并行数据转换成串行数据以便发送。在正常操作过程中,CPU可以随时读取16C552的状态信息,以报告16C552传输操作的类型和状态,包括各种错误状态,如奇偶校验、溢出、帧错误和FIFO错误等。此外,16C552还具有完整的MODEM控制功能,并有CTS、RTS、DSR、DTR、RI、DCD等信号端。

16C552具有一套完善的中断系统,可以自动设定优先级。它的串行口和并行口都可以独立地工作于中断和查询两种工作方式。

1.2 16C552的内部寄存器

16C552内部有12个单字节寄存器,这些寄存器占用了8个I/O口地址,其地址由A0~A2决定。其中有些寄存器共用一个I/O口地址,共用的I/O口可以通过读/写信号和线路控制寄存器(LCR)的D7位(DLAB)来进行区分,具体描述见表1所列,需要说明的是:只有当16C552的CS0或CS1为低电平时,串行通道才能被访问。

表1 I6C552的内部寄存器

DLABA2A1A0符  号寄  存  器LLLLRBR接收缓冲寄存器LLLHTHR发送保持寄存器LLLLIER中断允许寄存器XLHHIIR中断识别寄存器XLHLFCRFIFO控制寄存器XLHHLCR线路控制寄存器XHLLMCRMODE控制寄存器XHLHLSR线路状态寄存器XHHLMSRMODEM状态寄存器XHHHSCR高速缓存器寄存器HLLLDLL除数锁存器低位HLLHDLM除数锁存器高位

关于各寄存器内容的具体规定,限于篇幅,这里不作详述,有兴趣者可参看TI公司的相关产品资料介绍,但在串行通讯应用中,要重点搞清楚FCR、LCR、IER等几个寄存器的内容。此外,在实际应用中,有时可能会忽视MODEM控制寄存器中的D4位,该位为自测试循环回送状态控制位,利用它可以对串口的自测试进行控制,因此,在自测试进行完毕后,还应对该位进行复位,以保证系统的正常运行。

2 通讯系统硬件接口电路

本系统的硬件接口电路如图2所示。其中,地址译码电路可以根据实际需要采用不同的电路实现。为了使系统使用灵活方便,本方案中采用一片CPLD来进行系统的地址分配。复位电路可以利用专用复位芯片,也可用上拉电阻方式实现。外接晶振可以自行选择,然后根据晶振频率设置除数锁存器的高位和低位,从而获得通讯系统正确的波特率,本系统中使用的晶振是8MHz。此外,由于16C552A有两个串行通道和一个标准并行口,它们相互之间的.配合使用在硬件和软件上都要加以注意。建议将不用端口的片选接到高电平(16C552A的片选为低电平有效),以免出现错误。

3 串行通讯软件设计

3.1 通讯协议

本设计的通讯协议包括以下几点:

(1)波特率为9600。

(2)通讯命令由2个字节构成:第一个字节是同步字节0XFF;第二个字节是命令码,主要用来指示各种控制命令。

(3)每个字节包括8位数据位和1位停止位,无校验。

(4)在通讯过程中,上位机向TMS320F243发送同步命令,TMS320F243接收到后立即应答,若应答错误则重发。

(5)通讯程序向TMS320F243发送控制命令时,TMS320F243返回接收正确应答信号;通讯程序向TMS320F243查询系统参数命令时,TMS320F243按照规定格式返回所需数据。

PC机和TMS320F243均采用异步通讯方式,PC机采用事件驱动方式来接收数据,TMS320F243采用中断方式接收数据,而用查询方式发送数据。

3.2 上下位机通讯软件设计

在PC机上编写串行通讯程序至少有三种方法,分别为汇编语言、C语言和Visual系列通讯控件(MSComm)。相比较而言,Visual系列通讯控件能够用少量的代码轻松高效地完成编程任务。实际应用中,可用以Visual Basic(简称VB)6.0中的通讯控件MSComm为基础编写PC机的串行通讯程序,而用汇编语言编写下位机(F243)软件。上、下位机的串口程序流程分别如图3和图4所示。 16C552的初始化程序如下:

;THE 16C552 INITIALIZATION PROGRAM

C552_INIT:

LDP #00h

SPLK #83h,GSR0

OUT GSR0,0E003h ;设置LCR

SPLK #34h,GSR0

OUT GSR0,0E000h ;设置DLL

SPLK #00h,GSR0

OUT GSR0,0E001h ?; 设置DLM

SPLK #03h,GSR0

OUT GSR0,0E003h ?; 设置LCR

SPLK #08h,GSR0

OUT GSR0,0E004h ?; 设置MCR

SPLK #01h,GSR0

OUT GSR0,0E002h ?; 设置FCR

SPLK #01h,GSR0

OUT GSR0,0E001h ? ;设置IER

RET

图4

4 结束语

本文对使用异步通信芯片16C552实现PC机与DSP之间的串行通讯方法进行了研究,笔者已开发了其串行通讯软件,并在实验中调试通过。该软件不仅使用灵活方便,而且可以利用16C552的FIFO模式实现大数据量的收发,从而减少了对DSP的中断,缓解了系统资源紧张的情况。

iOS支付宝接口调用总结

集成显卡升级BIOS操作教程

bios设置教程 怎么进入bios?

通信论文

通信自荐书

通信 求职信

通信心得体会

通信年终总结

异步FIFO结构及FPGA设计

证券交易所的功能

异步通信BIOS功能调用(集锦10篇)

欢迎下载DOC格式的异步通信BIOS功能调用,但愿能给您带来参考作用!
推荐度: 推荐 推荐 推荐 推荐 推荐
点击下载文档 文档为doc格式
点击下载本文文档