第3章-CC2530接口之TinyOS组件编程4(Uart)_第1页
第3章-CC2530接口之TinyOS组件编程4(Uart)_第2页
第3章-CC2530接口之TinyOS组件编程4(Uart)_第3页
第3章-CC2530接口之TinyOS组件编程4(Uart)_第4页
第3章-CC2530接口之TinyOS组件编程4(Uart)_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章_CC2530接口之TinyOS组件编程4(Uart)第一页,共38页。3.4串口USART0和USART1是串行通信接口,两个USART具有同样的功能,可以分别运行于异步UART模式和同步SPI模式2第二页,共38页。3.4.1串口模式USART0和USART1是串行通信接口,两个USART具有同样的功能,可以分别运行于在两种模式下:异步UART模式同步SPI模式3第三页,共38页。3.4.1串口模式异步UART模式:UART模式提供异步串行接口,在UART模式中,有2种接口选择方式:2线接口和4线接口。2线接口,即使用RXD、TXD

。4线接口,即使用引脚RXD、TXD、RTS和CTS4第四页,共38页。3.4.1串口模式UART模式的操作具有以下特点:8位或者9位负载数据。奇校验、偶校验或者无奇偶校验。配置起始位和停止位。配置LSB(最低有效位)或者MSB(最高有效位)首先传送。独立收发中断。独立收发DMA触发。奇偶校验和帧校验出错状态。5第五页,共38页。3.4.1串口模式UART模式提供全双工传送,接收器中的位同步不影响发送功能。传送一个UART字节包含1个起始位,8个数据位,1个作为可选的第9位数据或者奇偶校验位,再加上1个或者2个停止位6第六页,共38页。USART控制和状态寄存器UxCSR3.4.1串口模式UART操作由USART控制和状态寄存器UxCSR以及UART控制寄存器UxUCR

位名称复位R/W描述7MODE0R/WUSART模式选择0:SPI模式1:UART模式6RE0R/W启动UART接收器。注意UART完全配置之前不能接收。0:禁止接收器1:使能接收器5SLAVE0R/WSPI主或者从模式选择0:SPI主模式1:SPI从模式4FE0R/W0UART帧错误状态0:无帧错误检测1:字节收到不正确停止位级别3FRR0R/W0UART奇偶校验错误状态0:无奇偶校验检测1:字节收到奇偶错误2RX_BYTE0R/W0接收字节状态,UART模式和SPI模式。当读U0DBUF该位自动清零,通过写0清除它,这样有效丢弃U0BUF中的数据0:没有收到字节1:接收字节就绪1TX_BYTE0R/W0传送字节状态,UART和SPI从模式0:字节没有传送1:写到数据缓存寄存器的最后字节已经传送0ACTIVE0RUSART传送/接收主动状态0:USART空闲1:USART在传送或者接收模式忙碌//设置UART模式U0CSR|=0x80;//允许接收U0CSR|=0x40;7第七页,共38页。USART控制和状态寄存器UxCSR3.4.1串口模式UART操作由USART控制和状态寄存器UxCSR以及UART控制寄存器UxUCRUART控制寄存器UxUCR位名称复位R/W描述7FLUSH0R/W1清除单元。当设置时,该事件将会立即停止当前操作并返回单元的空闲状态6FLOW0R/WUART硬件流使能。用RTS和CTS引脚选择硬件流控制的使用0:流控制禁止1:流控制使能5D90R/WUART奇偶校验位。当使能奇偶校验,写入D9的值决定发送的第9位的值。如果收到的第9位不匹配收到的字节的奇偶校验,接收报告ERR。0:奇校验1:偶校验4BIT90R/WUART9位数据使能。当该位是1时,使能奇偶校验位传输即第9位。如果通过PARITY使能奇偶校验,第9位的内容是通过D9给出的。0:8位传输1:9位传输3PARITY0R/WUART奇偶校验使能。除了为奇偶校验设置该位用于计算,必须使能9位模式0:禁用奇偶校验1:使能奇偶校验2SPB0R/WUART停止位数。选择要传送的停止位的位数0:1位停止位1:2位停止位1STOP0R/WUART停止位的电平必须不同于开始为的电平0:停止位低电平1:停止位高电平0START0R/WUART起始位电平,闲置线的极性采用选择的起始位级别的电平的相反的电平0:起始位低电平1:起始位高电平8第八页,共38页。3.4.1串口模式当UxCSR.MODE设置为1时,就选择了UART模式。当USART收发数据缓冲器UxDBUF写入数据时,该字节发送到输出引脚TXD。UxDBUF寄存器是双缓冲的

位名称复位R/W描述7:0DATA[7:0]0x00R/WUSART接收和传送数据。当写这个寄存器的时候数据被写到内部的传送数据寄存器,当读取该寄存器的时候,数据来自内部读取的数据寄存器//定义一个字符型变量unsignedchartemp;//读出U0DBUF中的数据temp=U0DBUF;9第九页,共38页。3.4.1串口模式UART发送过程

当字节传送开始时,UxCSR.ACTIVE位变为高电平,而当字节传送结束时为低电平。当传送接收结束时,UxCSR.TX_BYTE位设置为1。当USART收/发数据缓冲寄存器就绪,准备接收新的发送数据时,就产生了一个中断请求。该中断在传送开始之后立刻发生,因此,当字节正在发送时,新的字节能够装入数据缓存器。

10第十页,共38页。3.4.1串口模式UART接收过程

当1写入UxCSR.RE位时,在UART上数据接收开始。UART在输入引脚RXDx中寻找有效起始位,并且设置UxCSR.ACTIVE位为1。当检测出有效起始位时,收到的字节就传入到接收寄存器,UxCSR.RX_BYTE位设置为1。该操作完成时,产生接收中断。同时UxCSR.ACTIVE变为低电平。通过寄存器UxBUF提供收到的数据字节。当UxBUF读出时,UxCSR_BYTE位由硬件清零。

11第十一页,共38页。3.4.1串口模式UART硬件流控制当UxUCR.FLOW位设置为1,硬件流控制使能。然后,当接收寄存器为空而且接收使能时,RTS输出变低。在CTS输入变低之前,不会发生字节传送。硬件流控制适用于“4线接口”。12第十二页,共38页。3.4.1串口模式UART特征格式如果寄存器UxUCR中的BIT9和奇偶校验位设置为1,那么奇偶校验产生且使能。奇偶校验计算出来,作为第9位来传送。在接收期间,奇偶校验位计算出来而且与收到的第9位进行比较。如果奇偶校验位出错,则UxCSR.ERR位设置为高电平。当读取UxCSR时,UxCSR.ERR位清除。

13第十三页,共38页。3.4.1串口模式波特率产生当运行UART模式时,内部的波特率发生器设置UART波特率。当运行在SPI模式时,内部的波特率发生器设置SPI主时钟频率。

波特率由寄存器UxBAUD.BAUD[7:0]和UxGCR.BAUD_E[4:0]定义,该波特率用于UART传送,也用于SPI传送的串行时钟速率。

f是系统时钟频率,等于16MHzRCOSC或者32MHzXOSC

14第十四页,共38页。3.4.1串口模式波特率控制寄存器BAUD_M位名称复位R/W描述7:0BAUD_M[7:0]0x00R/W波特率小数部分的值。BAUD_E和BAUD_M决定了UART的波特率和SPI的主SCK时钟频率15第十五页,共38页。3.4.1串口模式UxGCR通用控制寄存器位名称复位R/W描述7CPOL0R/WSPI的时钟极性0:负时钟极性1:正时钟极性6CPHA0R/WSPI时钟相位0:当SCK从CPOL倒置到CPOL时数据输出到MOSI并且当SCK从CPOL倒置到CPOL时数据抽样到MISO1:当SCK从CPOL倒置到CPOL时数据输出到MOSI并且当SCK从CPOL倒置到CPOL时数据抽取到MISO5ORDER0R/W传送位顺序0:LSB先传送1:MSB先传送4:0BAUD_E[4:0]00000R/W波特率指数值。BAUD_E和BAUD_M决定了UART的波特率和SPI的主SCK时钟频率16第十六页,共38页。3.4.1串口模式标准波特率所需的寄存器值

波特率(bps)UxBAUD.BAUD_MUxGCR.BAUD_E误差(%)24005960.1448005970.1496005980.141440021680.03192005990.142880021690.033840059100.1457600216100.037680059110.14115200216110.03230400216120.03该表适用于典型的32MHz系统时钟//设置波特率为57600U0GCR|=10;U0BAUD|=216;17第十七页,共38页。3.4.1串口模式系统时钟设置波特率发生器的时钟是从所选的主系统时钟源获得的,主系统时钟源可以是32MHzXOSC或16MHzRCOSC。通过CLKCONCMD.OSC位可选择主系统时钟源

//设置时钟晶振为32MHZCLKCONCMD&=~0x40;18第十八页,共38页。3.4.1串口模式串口发送数据下述内容用于实现任务描述4.D.4,串口发送数据

P0.2为串口的RX,P0.3为串口的TX。通过JP6使用跳线选择使用RS232或者RS485

采用两线方式19第十九页,共38页。3.4.1串口模式串口初始化选择工作时钟。选择串口外设备用位置。初始化I/O口。设置波特率。voidinitUARTtest(void){//初始化时钟

InitClock();//使用串口备用位置1P0口

PERCFG=0x00;//P0用作串口

P0SEL=0x3c;//选择串口0优先作为串口

P2DIR&=~0XC0;//UART方式

U0CSR|=0x80;//波特率baud_e的选择

U0GCR|=10; //波特率设为57600U0BAUD|=216;//串口0发送中断标志清零

UTX0IF=0;}20第二十页,共38页。3.4.1串口模式串口发送字符串函数voidUartTX_Send_String(char*Data,intlen){intj;for(j=0;j<len;j++){U0DBUF=*Data++;while(UTX0IF==0);UTX0IF=0;}}21第二十一页,共38页。3.4.1串口模式主函数//包含的头文件#include<ioCC2530.h>#include<string.h>#defineuintunsignedint#defineucharunsignedchar//定义控制灯的端口#defineLED1P1_0#defineLED2P1_1//函数声明voidDelay(uint);voidinitUARTtest(void);voidUartTX_Send_String(char*Data,intlen);/*延时函数*/voidDelay(uintn){ uinti; for(i=0;i<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++); for(i=0;i<n;i++);}22第二十二页,共38页。3.4.1串口模式主函数/*main()函数*/voidmain(void){ uchari;charTxdata[30]="QingdaoDongheXinxiJishu";//P1输出控制LEDP1DIR=0x03;//开LED1LED1=0;//关LED2LED2=1;//串口初始化initUARTtest();//串口发送QingdaoDongheXinxiJishuUartTX_Send_String(Txdata,29);//清空Txdatafor(i=0;i<30;i++)Txdata[i]='';//将UART0TXtest赋给Txdata;strcpy(Txdata,"UART0TXtest"); while(1){//串口发送数据UartTX_Send_String(Txdata,sizeof("UART0TXTest"));//延时Delay(50000);Delay(50000);Delay(50000);LED1=~LED1;LED2=~LED2;}}23第二十三页,共38页。3.4.1串口模式下载程序至协调器设备中,程序运行后,LED1和LED2不断闪烁,使用串口工具观察实验现象

24第二十四页,共38页。3.4.1串口模式SPI模式:在SPI模式中,USART通过3线接口或者4线接口与外部系统通信。接口包含引脚MOSI、MISO、SCK和SS_N。当UxCSR.MODE设置为0时,选中SPI模式。SPI模式包含下列特征:

3线或者4线SPI接口。主和从模式。可配置的SCK极性和相位。可配置的LSB或MSB传送。25第二十五页,共38页。3.4.1串口模式SPI主操作模式当寄存器UxBUF写入字节后,SPI主模式字节传送开始。USART使用波特率发生器生成SCK串行时钟,而且传送发送寄存器提供的字节到输出引脚MOSI。同时接收寄存器从输入引脚MISO获取收到的字节。当传送开始UxCSR.ACTIVE位变高,当传送结束后UxCSR.ACTIVE位变低。当传送结束时,UxCSR.TX_BYTE位设置为1。串行时钟SCK的极性由UxGCR.CPOL位选择,其相位由UxCSR.CPHA位选择。字节传送的顺序由UxCSR.ORDER位选择。传送结束时,收到的数据字节由UxBUF提供读取。当这个新的数据在UxDBUFUSART接收/发送寄存器中准备好,就产生一个中断。26第二十六页,共38页。3.4.1串口模式SPI从操作模式SPI从模式字节传送由外部系统控制。输入引脚MISO上的数据传送到接收寄存器,该寄存器由串行时钟SCK控制。SCK为从模式输入。同时,发送寄存器中的字节传送到输出引脚MOSI。当传送开始UxCSR.ACTIVE位变高,当传送结束后UxCSR.ACTIVE位变低。当传送结束时,UxCSR.RX_BYTE位设置为1。接收中断产生。串行时钟SCK的极性由UxGCR.CPOL位选择,其相位由UxCSR.CPHA位选择。字节传送的顺序由UxCSR.ORDER位选择。传送结束时,收到的数据字节由UxBUF提供读取。27第二十七页,共38页。3.4.2串口中断每个USART都有两个中断:RX完成中断和TX完成中断。当传送开始时,触发TX中断,且数据缓冲区被卸载。

USART的中断使能位在寄存器IEN0和IEN2中USART0接收中断RX由IEN0.URX0IE控制。将该位设置0为中断禁止,设置1为中断使能。USART1接收中断RX由IEN0.URX1IE控制。将该位设置0为中断禁止,设置1为中断使能。例如设置USART0接收中断以及总中断使能

//设置USART0接收中断和总中断使能IEN0|=0x84;USART1发送中断TX由IEN2.UTX0IE控制。将该位设置0为中断禁止,设置1为中断使能。USART0发送中断TX由IEN2.UTX1IE控制。将该位设置0为中断禁止,设置1为中断使能。28第二十八页,共38页。3.4.2串口中断中断标志位在寄存器TCON和寄存器IRCON2中TCON中断标志寄存器位名称复位R/W描述7URX1IF0R/WH0USART1RX中断标志。当USART1RX中断发生时设为1且当CPU指向中断向量服务例程时清除。0:无中断1:中断发生6--0R/W保留5ADCIF0R/WH0ADC中断标志。ADC中断发生时设为1且CPU指向中断向量例程时清除。0:无中断1:发生中断4--0R/W保留3URX0IF0R/WH0USART0RX中断标志。当USART0中断发生时设为1且CPU指向中断向量例程时清除0:无中断1:发生中断2IT11R/W保留,必须一直设为1.设置为零将使能低级别中断探测,几乎总是如此(启动中断请求时执行一次)1RFERRIF0R/WH0RFTX/RXFIFO中断标志。当RFERR中断发生时设为1且CPU指向中断向量例程时清除。0:无中断1:发生中断0IT01R/W保留,必须一直设为1.设置为零将使能低级别中断探测,几乎总是如此(启动中断请求时执行一次)//清中断标志位URX0IF=029第二十九页,共38页。3.4.2串口中断中断标志位在寄存器TCON和寄存器IRCON2中TCON中断标志寄存器IRCON2中断标志寄存器位名称复位R/W描述7:5--000R/W保留4WDTIF0R/W看门狗定时器中断标志0:无中断1:发生中断3P1IF0R/W端口1中断标志0:无中断1:发生中断2UTX1IF0R/WUSART1TX中断标志0:无中断1:发生中断1UTX0IF0R/WUSART0TX中断标志0:无中断1:发生中断0P2IF0R/W端口2中断标志0:无中断1:发生中断30第三十页,共38页。3.4.2串口中断下述内容用于实现任务描述4.D.5,通过串口接收数据控制LED的亮灭串口初始化voidinitUARTtest(void){//晶振

CLKCONCMD&=~0x40;//等待晶振稳定

while(!(SLEEPSTA&0x40));//TICHSPD128分频,CLKSPD不分频

CLKCONCMD&=~0x47;//关闭不用的RC振荡器

SLEEPCMD|=0x04;//选择备用位置1为串口P0口

PERCFG=0x00;//P0用作串口

P0SEL=0x3c;//UART方式

U0CSR|=0x80;//波特率baud_e选择

U0GCR|=10; //波特率设为57600U0BAUD|=216;//串口0TX中断标志位置1UTX0IF=1;//允许接收

U0CSR|=0X40;//开总中断,串口1接收中断

IEN0|=0x84;}31第三十一页,共38页。3.4.2串口中断下述内容用于实现任务描述4.D.5,通过串口接收数据控制LED的亮灭LED初始化voidInit_LED_IO(void){ //P1.0、P1.1控制LED P1DIR|=0x03; //关LED1 led1=0; //关LED2 led2=0;}32第三十二页,共38页。3.4.2串口中断下述内容用于实现任务描述4.D.5,通过串口接收数据控制LED的亮灭头文件、函数声明以及宏定义#include<iocc2530.h>#include<string.h>#defineuintunsignedint#defineucharunsignedchar//定义控制灯的端口#defineLED1P1_0#defineLED2P1_1//函数的声明voidDelay(uint);voidinitUARTtest(void);voidInit_LED_IO(void);ucharRecdata[3]="000";ucharRTflag=1;uchartemp;uintdatanumber=0;33第三十三页,共38页。3.4.2串口中断下述内容用于实现任务描述4.D.5,通过串口接收数据控制LED的亮灭主函数voidmain(void){ ucharii; Init_LED_IO();initUARTtest();while(1){//接收if(RTflag==1){if(temp!=0){//’#‘被定义为结束字符if((temp!='#')&&(datanumber<3)){//最多能接收3个字符Recdata[datanumber++]=temp;}else{//进入改变小灯的程序RTflag=3;}//接收三个字符后进入LED控制if(datanumber==3)RTflag=3;temp=0;}}//控制LED1if(RTflag==

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论