123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- /******************************************************************************************************
- IC : TM52F1386
-
- 演示效果 :
- 通过USB将开发板与电脑,打开电脑中的串口助手,设置对应端口,
- 9600波特率,8位数据位,无校验位,1位停止位。向学习板发送任
- 意1个字节数据,学习板会回传1个相同字节数据。
-
- 注意:
- 需要将底板的OP4端子的TX与RX跳线帽接好
-
- 时钟 :
- 快时钟系统主频为 18.432M/2 = 9.216M
- 分给定时器的时钟频率为9.216M/2 = 4.608M
- *********************************************************************************************************/
- #include <REGtenxTM52F1386.h>
- #include "TM52F1386_bsp.h"
- #include <intrins.h>
- #include "uart2.h"
- //波特率= Fsys/32/UART2BRP
- #define SMOD_PRICE 1
- #define FRC_HZ 18432000
- #define FRC_DIV 2
- #define BAUD4800 4800
- #define BAUD9600 9600
- #define BAUD19200 19200
- #define BAUD38400 38400
- #define BAUD57600 57600
- #define BAUD115200 115200 //必须在系统一分频下
- #define UART2BRP (unsigned int)(FRC_HZ/FRC_DIV/32/BAUD9600) //计算不同波特率下的UART2BRP
- unsigned char txrx_buf[8] = "666\r\n";
- /**********************************************************************************************************
- **函数名称 :uart1_gpio_init
- **函数描述 :串口IO初始化
- **输 入 :None
- **输 出 :None
- **********************************************************************************************************/
- void uart2_gpio_init()
- {
- PORTIDX = PORT1;
- PINMOD10 = PINMOD10&0x00 | PIN_L_MODE_OD_IPU | PIN_H_MODE_PP;
- P1_1 = 1; // tx
- P1_0 = 1; // rx
-
- // p55,54
- SET_REG(PORTIDX, 5);
- SET_REG_BITS(PINMOD54, PINMOD5, PIN_MODE_PP); // 配置为CMOS推挽输出
- P5_5 = 0;
- SET_REG(PORTIDX, 5);
- SET_REG_BITS(PINMOD54, PINMOD4, PIN_MODE_PP); // 配置为CMOS推挽输出
- P5_5 = 0;
- }
- /******************************************************************************************
- ** 函数名称: uart2_init
- ** 函数描述: uart初始化函数 9600-8-1 无校验(轮询接收)
- ** 输入参数: 无
- ** 输出参数: 无
- *******************************************************************************************/
- void uart2_init (void)
- {
- uart2_gpio_init();
- UART2_8Bits;
- SCON2 = (SCON2&~SCON2_REN2_MASK) | 1 <<SCON2_REN2_POS; //允许接收,REN2=1
- UART2CON = (UART2CON &~ UART2CON_UART2BRP_MASK) | (UART2BRP << UART2CON_UART2BRP_POS);
- SCON2 = (SCON2 & ~RI2); //UART2 接收中断标志
- SCON2 = (SCON2 & ~TI2); // UART2 发送中断标志
-
- UART2_RECEPTION_ENABLE; //UART接收使能
- INTE1 = (INTE1 &~ INTE1_ES2_MASK) | 1 <<INTE1_ES2_POS; //ES2=1
- }
- /******************************************************************************************
- ** 函数名称: uart_recv
- ** 函数描述: uart2接收函数
- ** 输入参数: 无
- ** 输出参数: 无
- *******************************************************************************************/
- /*void uart_recv (unsigned char *buf, unsigned char len)
- {
- unsigned char i;
- for (i = 0; i < len; i++)
- {
- while ( (SCON2 & RI2) == 0);
- *buf = SBUF2;
- SCON2 = SCON2 & ~RI2; //清除标志位
- buf++;
- }
- }*/
- /******************************************************************************************
- ** 函数名称: uart_send
- ** 函数描述: uart2发送函数
- ** 输入参数: 无
- ** 输出参数: 无
- *******************************************************************************************/
- /*void uart_send (unsigned char *buf, unsigned char len)
- {
- unsigned char i;
- for (i = 0; i < len; i++)
- {
- SBUF2 = *buf;
- buf++;
- while ((SCON2 & TI2) == 0);
- SCON2 = SCON2 & ~TI2; //清除标志位
- }
- }*/
- /**********************************************************************************************************
- **函数名称 :uart1_irq
- **函数描述 :uart1中断入口
- **输 入 :None
- **输 出 :None
- **********************************************************************************************************/
- void uart2_irq() interrupt 5
- {
- unsigned char temp;
- if (RI2)
- {
- temp = SBUF2;
- uart_receive_input(temp); // zigbee函数
- RI2 = 0;
- }
- /* if (TI)
- {
- TI = 0;
- busy = 0; // 清除忙标志
- }*/
- // 不是方式0,不采用中断请标志位
- }
- /**********************************************************************************************************
- **函数名称 UART1_send
- **函数描述 :uart1发送单字节数据
- **输 入 char
- **输 出 :None
- **********************************************************************************************************/
- void UART2_send(unsigned char c) // 发送单字节
- {
- // while (busy)
- // ;
- // busy = 1;
- SBUF2 = c; // 发送单字节
- while (TI2 == 0)
- ; // 等待发送完成
- TI2 = 0; //
- }
- /**********************************************************************************************************
- **函数名称 UART1_send_buf
- **函数描述 :uart1发送字符串
- **输 入 char
- **输 出 :None
- **********************************************************************************************************/
- void UART2_send_buf(char *s) // 发送字符串
- {
- while (*s)
- {
- UART2_send(*s++);
- }
- }
- /******************************************************************************************
- ** 函数名称: main
- ** 函数描述: main函数
- ** 输入参数: 无
- ** 输出参数: 无
- *******************************************************************************************/
- /*void main (void)
- {
- bsp_clock_init(); // 系统快钟18.432 div 2 = 9.216Mhz
- uart2_init();
- while (1)
- {
- uart_recv (txrx_buf, 1);
- uart_send (txrx_buf, 1);
- // bsp_delay_ms(1000);
- }
- }*/
|