/* uart 非中断模式R,轮询,不用fifo
*/
#include #include "uart.h" #include "gpio.h" #include "sysc.h" #define UART0 ( ( volatile UART_REGS * ) (UART_BASE)) u32 Inp32(u32 xx) { return xx; } void GpioInit() { // 设置gpio ,使用uart0 u32 TEMP; TEMP = GPIO->rGPIOACON; TEMP &= ~(0XFF); TEMP |= 0X22; GPIO->rGPIOACON = TEMP; } // SEND 8byte,1 stop bit, no parity void UartInit() { u32 TEMP; TEMP = Inp32(UART0->rULCON); TEMP |= 0X03; UART0->rULCON=TEMP; // SET RT MODE ,polling mode TEMP = Inp32(UART0->rUCON); TEMP &=~(0xf); TEMP |= 0X5; UART0->rUCON= TEMP; } char Getchar() { u8 TEMP; while(!(UART0->rUTRSTAT &0X1)); TEMP = UART0->rURXH; return TEMP; } void Sendchar(char x) { while(!(UART0->rUTRSTAT & 0X4)); UART0->rUTXH = x; } void BaudInit(u32 Baudrate) { //设置波特率 ,公式给出,参照datasheet u32 TEMP,temp; SYSC_GetClkInform(); TEMP = (g_PCLK /(Baudrate*16))-1; temp = TEMP; TEMP = (int)TEMP; UART0->rUBRDIV = TEMP; temp -= TEMP; temp = (int)(temp*16); switch(temp){ case 0: TEMP = 0X0000; break; case 1: TEMP = 0X0080; break; case 2: TEMP = 0X0808; break; case 3: TEMP = 0X0888; break; case 4: TEMP = 0X2222; break; case 5: TEMP = 0X4924; break; case 6: TEMP = 0X4a52; break; case 7: TEMP = 0X54aa; break; case 8: TEMP = 0X5555; break; case 9: TEMP = 0Xd555; break; case 10: TEMP = 0Xd5d5; break; case 11: TEMP = 0Xddd5; break; case 12: TEMP = 0Xdddd; break; case 13: TEMP = 0Xdfdd; break; case 14: TEMP = 0Xdfdf; break; case 15: TEMP = 0Xffdf; break; } UART0->rUDIVSLOT = TEMP; } int main() { u8 ch; UartInit(); BaudInit(9600); while(1) { Sendchar('x'); ch= Getchar(); if(ch == 'x') Sendchar('y'); } } 可以参照datasheet,要大胆尝试,试一试就出来了
上一篇:6410 ad 中断读取数据
下一篇:tiny6410 linux混杂设备 led驱动
推荐阅读最新更新时间:2024-11-06 16:36
设计资源 培训 开发板 精华推荐
- LT1021CMH-5 用于超精密电流源的电压基准的典型应用
- AM2S-0524SZ 24V 2瓦直流转直流转换器的典型应用
- LTC2266-12、12 位、80Msps 低功耗双通道 ADC 的典型应用
- LTC3405AES6-1.5 高效降压转换器的典型应用电路
- DER-515 - 12 W 不调光非隔离 LED 驱动器
- ProMicro_TypeC_All GPIO:自制Atmega32u4核心板
- L4970A 10A 开关稳压器的典型应用
- MC33074ADR2G 低压峰值检测器的典型应用
- LTC6990MPS6#TRMPBF 使用 8 位 DAC 编程控制振荡器 NDIV 的典型应用
- HV857,用于恒温器的 1 灯通用灯驱动器