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

作者: bugbugout
上传时间为: 2018-05-21 08:45 AM
2018-05-21
阅读:

       串口通讯的应用也是非常广泛的,所以本期给大家介绍一下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循环里面。这样所有的准备工作就完成了,编译通过后就可以烧录到开发板中了,一个简单的串口测试程序也就完成了。
全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示