查看: 1265|回复: 0

ADI EVAL-ADuCM360QSPZ开发套件试用报告三

[复制链接]

该用户从未签到

发表于 2018-5-21 08:45:37 | 显示全部楼层 |阅读模式
分享到:
串口通讯的应用也是非常广泛的,所以本期给大家介绍一下ADuCM360的串口通讯的编程。因为之前已经把用到的所有库函数“封装”在了一个.h文件中,所以编程就比较方便。首先还是要初始化函数的,代码给大家看一下。
void Uart_Init(){   WdtCfg(T3CON_PRE_DIV1,T3CON_IRQ_EN,T3CON_PD_DIS);   ClkDis(CLKDIS_DISSPI0CLK|CLKDIS_DISSPI1CLK|CLKDIS_DISI2CCLK|CLKDIS_DISPWMCLK|CLKDIS_DIST0CLK|CLKDIS_DIST1CLK|CLKDIS_DISDMACLK);   ClkCfg(CLK_CD0,CLK_HF,CLKSYSDIV_DIV2EN_DIS,CLK_UCLKCG);         ClkSel(CLK_CD7,CLK_CD7,CLK_CD0,CLK_CD7);            pADI_GP0->GPCON |= 0x3C;                         UrtCfg(pADI_UART,B9600,COMLCR_WLS_8BITS,0);   UrtIntCfg(pADI_UART,COMIEN_ETBEI|COMIEN_ERBFI);          NVIC_EnableIRQ(UART_IRQn);               printf("串口已开启\r\n");}初始化函数的前四行之间介绍过了,都是通用的套路,所以这里就不介绍了。来看下一行,这行代码作用是选择CD0作为串口的时钟,确定完串口时钟后要选择串口RX/TX引脚了,因为该芯片具有好几组串口,所以这里选择的的是P0.1和P0.2口。然后对数据传输格式进行配置,选择9600波特率,8位数据位,1位停止位,不设奇偶校验位。然后下一行代码是配置中断,之后就是中断使能语句了。最后我又加了一句输出文本语句,目的是看一下串口是否进行了初始化。对了,这里要调用printf()函数也需要对其进行初始化的,初始化代码和串口的完全一样。另外还需要一个printf的重定向函数。
int fputc(int ch, FILE *f)      {            while(!TxBufferEmpty);      UrtTx(pADI_UART,ch);     TxBufferEmpty = 0;      return (ch);   }这样初始化就完成了,之后再主函数中调用初始化函数就好了。因为我采用了模块化编程,所以两个初始化函数都要调用,不然运行会出错的。       接下来就是串口中断函数的编写了,代码先贴出来,这样比较容易讲解。
void UART_Int_Handler ()                              {    volatile unsigned char UART_IntID = 0;     UART_IntID= UrtIntSta(pADI_UART);      if((UART_IntID & 0x02) == 0x02)          {      TxBufferEmpty = 1;   } if((UART_IntID & 0x4) == 0x4)             {                        Tab[count]=UrtRx(pADI_UART);                          count++;                 if(count==3)                         count=0;   }<br>}中断函数就是上面的代码了。简单讲就是判断一下数据是否发送完毕,发送完毕后发送标志位置1,然后是判断一下数据是否接收完毕。将接收到的数据暂存到一个数组中,之后可以根据收到的数据判断回传数据。为此我特地写了一个函数,代码如下。void Text(){   if(Tab[0]==0x01)     {      printf("show=%d\r\n",0x01);      Tab[0]=0x00;       Tab[1]=0x00;      Tab[2]=0x00;      }                 else if(Tab[0]==0x02)     {      printf("show=%d\r\n",0x02);      Tab[0]=0x00;       Tab[1]=0x00;      Tab[2]=0x00;      }}我相信大家很容易就能理解这个函数,就是根据发送数据的首位进行判断然后进行判断要输出的数据。这个函数要放在主函数的while循环里面。这样所有的准备工作就完成了,编译通过后就可以烧录到开发板中了,一个简单的串口测试程序也就完成了。
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

手机版|小黑屋|与非网

GMT+8, 2024-12-19 00:36 , Processed in 0.121485 second(s), 18 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.