uart2.c 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. /******************************************************************************************************
  2. IC : TM52F1386
  3. 演示效果 :
  4. 通过USB将开发板与电脑,打开电脑中的串口助手,设置对应端口,
  5. 9600波特率,8位数据位,无校验位,1位停止位。向学习板发送任
  6. 意1个字节数据,学习板会回传1个相同字节数据。
  7. 注意:
  8. 需要将底板的OP4端子的TX与RX跳线帽接好
  9. 时钟 :
  10. 快时钟系统主频为 18.432M/2 = 9.216M
  11. 分给定时器的时钟频率为9.216M/2 = 4.608M
  12. *********************************************************************************************************/
  13. #include <REGtenxTM52F1386.h>
  14. #include "TM52F1386_bsp.h"
  15. #include <intrins.h>
  16. #include "uart2.h"
  17. //波特率= Fsys/32/UART2BRP
  18. #define SMOD_PRICE 1
  19. #define FRC_HZ 18432000
  20. #define FRC_DIV 2
  21. #define BAUD4800 4800
  22. #define BAUD9600 9600
  23. #define BAUD19200 19200
  24. #define BAUD38400 38400
  25. #define BAUD57600 57600
  26. #define BAUD115200 115200 //必须在系统一分频下
  27. #define UART2BRP (unsigned int)(FRC_HZ/FRC_DIV/32/BAUD9600) //计算不同波特率下的UART2BRP
  28. unsigned char txrx_buf[8] = "666\r\n";
  29. /**********************************************************************************************************
  30. **函数名称 :uart1_gpio_init
  31. **函数描述 :串口IO初始化
  32. **输 入 :None
  33. **输 出 :None
  34. **********************************************************************************************************/
  35. void uart2_gpio_init()
  36. {
  37. PORTIDX = PORT1;
  38. PINMOD10 = PINMOD10&0x00 | PIN_L_MODE_OD_IPU | PIN_H_MODE_PP;
  39. P1_1 = 1; // tx
  40. P1_0 = 1; // rx
  41. // p55,54
  42. SET_REG(PORTIDX, 5);
  43. SET_REG_BITS(PINMOD54, PINMOD5, PIN_MODE_PP); // 配置为CMOS推挽输出
  44. P5_5 = 0;
  45. SET_REG(PORTIDX, 5);
  46. SET_REG_BITS(PINMOD54, PINMOD4, PIN_MODE_PP); // 配置为CMOS推挽输出
  47. P5_5 = 0;
  48. }
  49. /******************************************************************************************
  50. ** 函数名称: uart2_init
  51. ** 函数描述: uart初始化函数 9600-8-1 无校验(轮询接收)
  52. ** 输入参数: 无
  53. ** 输出参数: 无
  54. *******************************************************************************************/
  55. void uart2_init (void)
  56. {
  57. uart2_gpio_init();
  58. UART2_8Bits;
  59. SCON2 = (SCON2&~SCON2_REN2_MASK) | 1 <<SCON2_REN2_POS; //允许接收,REN2=1
  60. UART2CON = (UART2CON &~ UART2CON_UART2BRP_MASK) | (UART2BRP << UART2CON_UART2BRP_POS);
  61. SCON2 = (SCON2 & ~RI2); //UART2 接收中断标志
  62. SCON2 = (SCON2 & ~TI2); // UART2 发送中断标志
  63. UART2_RECEPTION_ENABLE; //UART接收使能
  64. INTE1 = (INTE1 &~ INTE1_ES2_MASK) | 1 <<INTE1_ES2_POS; //ES2=1
  65. }
  66. /******************************************************************************************
  67. ** 函数名称: uart_recv
  68. ** 函数描述: uart2接收函数
  69. ** 输入参数: 无
  70. ** 输出参数: 无
  71. *******************************************************************************************/
  72. /*void uart_recv (unsigned char *buf, unsigned char len)
  73. {
  74. unsigned char i;
  75. for (i = 0; i < len; i++)
  76. {
  77. while ( (SCON2 & RI2) == 0);
  78. *buf = SBUF2;
  79. SCON2 = SCON2 & ~RI2; //清除标志位
  80. buf++;
  81. }
  82. }*/
  83. /******************************************************************************************
  84. ** 函数名称: uart_send
  85. ** 函数描述: uart2发送函数
  86. ** 输入参数: 无
  87. ** 输出参数: 无
  88. *******************************************************************************************/
  89. /*void uart_send (unsigned char *buf, unsigned char len)
  90. {
  91. unsigned char i;
  92. for (i = 0; i < len; i++)
  93. {
  94. SBUF2 = *buf;
  95. buf++;
  96. while ((SCON2 & TI2) == 0);
  97. SCON2 = SCON2 & ~TI2; //清除标志位
  98. }
  99. }*/
  100. /**********************************************************************************************************
  101. **函数名称 :uart1_irq
  102. **函数描述 :uart1中断入口
  103. **输 入 :None
  104. **输 出 :None
  105. **********************************************************************************************************/
  106. void uart2_irq() interrupt 5
  107. {
  108. unsigned char temp;
  109. if (RI2)
  110. {
  111. temp = SBUF2;
  112. uart_receive_input(temp); // zigbee函数
  113. RI2 = 0;
  114. }
  115. /* if (TI)
  116. {
  117. TI = 0;
  118. busy = 0; // 清除忙标志
  119. }*/
  120. // 不是方式0,不采用中断请标志位
  121. }
  122. /**********************************************************************************************************
  123. **函数名称 UART1_send
  124. **函数描述 :uart1发送单字节数据
  125. **输 入 char
  126. **输 出 :None
  127. **********************************************************************************************************/
  128. void UART2_send(unsigned char c) // 发送单字节
  129. {
  130. // while (busy)
  131. // ;
  132. // busy = 1;
  133. SBUF2 = c; // 发送单字节
  134. while (TI2 == 0)
  135. ; // 等待发送完成
  136. TI2 = 0; //
  137. }
  138. /**********************************************************************************************************
  139. **函数名称 UART1_send_buf
  140. **函数描述 :uart1发送字符串
  141. **输 入 char
  142. **输 出 :None
  143. **********************************************************************************************************/
  144. void UART2_send_buf(char *s) // 发送字符串
  145. {
  146. while (*s)
  147. {
  148. UART2_send(*s++);
  149. }
  150. }
  151. /******************************************************************************************
  152. ** 函数名称: main
  153. ** 函数描述: main函数
  154. ** 输入参数: 无
  155. ** 输出参数: 无
  156. *******************************************************************************************/
  157. /*void main (void)
  158. {
  159. bsp_clock_init(); // 系统快钟18.432 div 2 = 9.216Mhz
  160. uart2_init();
  161. while (1)
  162. {
  163. uart_recv (txrx_buf, 1);
  164. uart_send (txrx_buf, 1);
  165. // bsp_delay_ms(1000);
  166. }
  167. }*/