[DemoCode下载] M051 UART0

[复制链接]
940|1
 楼主| 奥德赛 发表于 2016-1-15 21:18 | 显示全部楼层 |阅读模式
  1. #include "UART.h"
  2. /****************************************
  3. *函数名称:UartInit
  4. *输    入:unFosc   晶振频率
  5.           unBaud  波特率
  6. *输    出:无
  7. *功    能:串口初始化
  8. ******************************************/
  9. VOID UartInit(UINT32 unFosc,UINT32 unBaud)
  10. {
  11.     P3_MFP &= ~(P31_TXD0 | P30_RXD0);  
  12.     P3_MFP |= (TXD0 | RXD0);      //P3.0 使能为串口0接收
  13.           //P3.1 使能为串口0发送
  14.     UART0_Clock_EN;         //串口0时钟使能
  15.     UARTClkSource_ex12MHZ;  //串口时钟选择为外部晶振
  16.     CLKDIV &= ~(15<<8);  //串口时钟分频为0
  17.     IPRSTC2 |= UART0_RST;   //复位串口0
  18.     IPRSTC2 &= ~UART0_RST;  //复位结束
  19.     UA0_FCR |= TX_RST;      //发送FIFO复位
  20.     UA0_FCR |= RX_RST;      //接收FIFO复位
  21.     UA0_LCR &= ~PBE;      //校验位功能取消
  22. UA0_LCR &= ~WLS;
  23.     UA0_LCR |= WL_8BIT;     //8位数据位
  24.     UA0_LCR &= NSB_ONE;     //1位停止位
  25.     UA0_BAUD |= DIV_X_EN|DIV_X_ONE;   //设置波特率分频   
  26.     UA0_BAUD |= ((unFosc / unBaud) -2); //波特率设置  UART_CLK/(A+2) = 115200, UART_CLK=12MHz
  27. UA0_IER |= RDA_IEN;     //接收数据中断使能
  28. NVIC_ISER |= UART0_INT;     //使能串口0中断
  29. }
  30. /****************************************
  31. *函数名称:UartSend
  32. *输    入:pBuf     发送数据缓冲区
  33.           unNumOfBytes  发送字节总数
  34. *输    出:无
  35. *功    能:串口发送数据
  36. ******************************************/
  37. VOID UartSend(UINT8 *pBuf,UINT32 unNumOfBytes)
  38. {
  39.   UINT32 i;
  40.   for(i=0; i<unNumOfBytes; i++)
  41.   {
  42.          UA0_THR = *(pBuf+i);
  43.          while ((UA0_FSR&TX_EMPTY) != 0x00); //检查发送FIFO是否为空
  44.   }
  45. }
  46. /****************************************
  47. *函数名称:UART0_IRQHandler
  48. *输    入:无
  49. *输    出:无
  50. *功    能:串口0中断服务函数
  51. ******************************************/
  52. VOID UART0_IRQHandler(VOID)
  53. {
  54.     UINT8 ucData;
  55. if(UA0_ISR & RDA_INT)     //检查是否接收数据中断
  56. {  
  57.   while(UA0_ISR & RDA_IF)    //获取所有接收到的数据
  58.   {
  59.    while (UA0_FSR & RX_EMPTY);  //检查接收FIFO是否为空   
  60.    ucData = UA0_RBR;    //读取数据
  61.    UartSend(&ucData,1);   //发送数据
  62.    //以下测试接收数据用
  63.     if(ucData == 0x11)  P2_DOUT &= ~0xff;
  64.     if(ucData == 0xff)  P2_DOUT |= 0xff;
  65.   }
  66. }
  67. }
  68. /****************************************
  69. *函数名称:main
  70. *输    入:无
  71. *输    出:无
  72. *功    能:函数主体
  73. ******************************************/
  74. INT32 main(VOID)
  75. {
  76. // unsigned char i,j;
  77.      PROTECT_REG
  78.   (            //ISP下载时保护FLASH存储器
  79.    PWRCON |= XTL12M_EN;      //默认时钟源为外部晶振
  80.    while((CLKSTATUS & XTL12M_STB) == 0);   //等待12MHz时钟稳定
  81.    CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //设置外部晶振为系统时钟
  82.    //以下测试接收数据
  83.    //P2_PMD=0x5555;          //GPIO设置为输出模式  
  84.   )
  85.   UartInit(12000000,9600);      //波特率设置为9600bps
  86.   while(1)
  87.   {
  88. /*   j=0;
  89.                 //发送数据0~255
  90.     for(i=0; i<256; i++)
  91.     {
  92.        UartSend(&j,1);
  93.      j++;
  94.      Delayms(50);   
  95.     } */
  96.   }
  97. }


quray1985 发表于 2016-1-17 20:37 | 显示全部楼层
那如果用dma的话应该再加什么呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

397

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部