- #include "UART.h"
- /****************************************
- *函数名称:UartInit
- *输 入:unFosc 晶振频率
- unBaud 波特率
- *输 出:无
- *功 能:串口初始化
- ******************************************/
- VOID UartInit(UINT32 unFosc,UINT32 unBaud)
- {
- P3_MFP &= ~(P31_TXD0 | P30_RXD0);
- P3_MFP |= (TXD0 | RXD0); //P3.0 使能为串口0接收
- //P3.1 使能为串口0发送
- UART0_Clock_EN; //串口0时钟使能
- UARTClkSource_ex12MHZ; //串口时钟选择为外部晶振
- CLKDIV &= ~(15<<8); //串口时钟分频为0
- IPRSTC2 |= UART0_RST; //复位串口0
- IPRSTC2 &= ~UART0_RST; //复位结束
- UA0_FCR |= TX_RST; //发送FIFO复位
- UA0_FCR |= RX_RST; //接收FIFO复位
- UA0_LCR &= ~PBE; //校验位功能取消
- UA0_LCR &= ~WLS;
- UA0_LCR |= WL_8BIT; //8位数据位
- UA0_LCR &= NSB_ONE; //1位停止位
- UA0_BAUD |= DIV_X_EN|DIV_X_ONE; //设置波特率分频
- UA0_BAUD |= ((unFosc / unBaud) -2); //波特率设置 UART_CLK/(A+2) = 115200, UART_CLK=12MHz
- UA0_IER |= RDA_IEN; //接收数据中断使能
- NVIC_ISER |= UART0_INT; //使能串口0中断
- }
- /****************************************
- *函数名称:UartSend
- *输 入:pBuf 发送数据缓冲区
- unNumOfBytes 发送字节总数
- *输 出:无
- *功 能:串口发送数据
- ******************************************/
- VOID UartSend(UINT8 *pBuf,UINT32 unNumOfBytes)
- {
- UINT32 i;
- for(i=0; i<unNumOfBytes; i++)
- {
- UA0_THR = *(pBuf+i);
- while ((UA0_FSR&TX_EMPTY) != 0x00); //检查发送FIFO是否为空
- }
- }
- /****************************************
- *函数名称:UART0_IRQHandler
- *输 入:无
- *输 出:无
- *功 能:串口0中断服务函数
- ******************************************/
- VOID UART0_IRQHandler(VOID)
- {
- UINT8 ucData;
- if(UA0_ISR & RDA_INT) //检查是否接收数据中断
- {
- while(UA0_ISR & RDA_IF) //获取所有接收到的数据
- {
- while (UA0_FSR & RX_EMPTY); //检查接收FIFO是否为空
- ucData = UA0_RBR; //读取数据
- UartSend(&ucData,1); //发送数据
- //以下测试接收数据用
- if(ucData == 0x11) P2_DOUT &= ~0xff;
- if(ucData == 0xff) P2_DOUT |= 0xff;
- }
- }
- }
- /****************************************
- *函数名称:main
- *输 入:无
- *输 出:无
- *功 能:函数主体
- ******************************************/
- INT32 main(VOID)
- {
- // unsigned char i,j;
- PROTECT_REG
- ( //ISP下载时保护FLASH存储器
- PWRCON |= XTL12M_EN; //默认时钟源为外部晶振
- while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz时钟稳定
- CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //设置外部晶振为系统时钟
- //以下测试接收数据
- //P2_PMD=0x5555; //GPIO设置为输出模式
- )
- UartInit(12000000,9600); //波特率设置为9600bps
- while(1)
- {
- /* j=0;
- //发送数据0~255
- for(i=0; i<256; i++)
- {
- UartSend(&j,1);
- j++;
- Delayms(50);
- } */
- }
- }
-
|