void InitUart(uchar Ux,uchar GCR,uchar BAUD) { if(Ux == USART0) { //端口设置 PERCFG = 0x00; //备用位置1 SFR寄存器位PERCFG.U0CFG选择是否使用备用位置1 或备用位置 2。 P0SEL = 0x0c; //根据外设 I/O 引脚映射设置P0_2(接收),P0_3(发送)为外设引脚 1100 P2DIR &= ~0xc0; //USART0为第一优先级 1100 0000 //UART设置 U0CSR |= 0x80; //USART模式选择,设置为UART方式 1000 0000 7位描述:USART 0 控制和状态 U0GCR |= GCR; //GCR 11 BAUD 216 U0BAUD |= BAUD; //U0GCR的0-4位:波特率指数值 U0BAUD的0-7位:波特率小数部分的值 UTX0IF = 0; //UART0 TX传送中断标志初始置位0 U0CSR |= 0X40; //UART接收器使能。1: 接收器使能 0100 0000 IEN0 |= 0x84; //开总中断,接收中断 1000 0100 第2位描述:USART0 RX中断使能 第7位描述:1: 通过设置对应的使能位将每个中断源分别使能和禁止 } else if(Ux == USART1) { //端口设置 PERCFG = 0x00; //备用位置1 SFR寄存器位PERCFG.U0CFG选择是否使用备用位置1 或备用位置 2。 P0SEL |= 0x30; //根据外设 I/O 引脚映射设置P0_5(接收),P0_4(发送)为外设引脚 P2DIR |= 0x10; //USART1为第一优先级 //UART设置 U1CSR |= 0x80; //USART模式选择,设置为UART方式 1000 0000 7位描述:USART 0 控制和状态 U1GCR = GCR; U1BAUD = BAUD; //根据手册,设置波特率 UTX1IF = 0; //UART1 TX中断标志初始置位0 IEN0 |= 0x84; } }
时间: 2024-02-14 10:23:55 浏览: 108
mcu_drivers.zip_嵌入式/单片机/硬件编程_C/C++_
这段代码是用于初始化UART通信的函数,根据传入的参数Ux的不同,来初始化不同的串口通信模块。当Ux为USART0时,将P0_2定义为UART接收引脚,P0_3定义为UART发送引脚;当Ux为USART1时,将P0_5定义为UART接收引脚,P0_4定义为UART发送引脚。
下面是该函数的执行过程:
1. 接收传入的参数Ux,判断其值是否为USART0。
2. 若Ux的值为USART0,则进入if语句中,执行PERCFG = 0x00;设置备用位置1,SFR寄存器位PERCFG.U0CFG选择是否使用备用位置1或备用位置2;执行P0SEL = 0x0c;将P0_2和P0_3设置为外设引脚;执行P2DIR &= ~0xc0;将USART0设置为第一优先级;执行U0CSR |= 0x80;将USART模式选择为UART方式;执行U0GCR |= GCR;U0BAUD |= BAUD;分别设置波特率指数值和波特率小数部分的值;执行UTX0IF = 0;将UART0 TX传送中断标志初始置为0;执行U0CSR |= 0X40;使能UART接收器;执行IEN0 |= 0x84;开启总中断和接收中断,使能USART0 RX中断。
3. 若Ux的值不为USART0,继续判断其值是否为USART1。
4. 若Ux的值为USART1,则进入else if语句中,执行PERCFG = 0x00;设置备用位置1,SFR寄存器位PERCFG.U0CFG选择是否使用备用位置1或备用位置2;执行P0SEL |= 0x30;将P0_5和P0_4设置为外设引脚;执行P2DIR |= 0x10;将USART1设置为第一优先级;执行U1CSR |= 0x80;将USART模式选择为UART方式;执行U1GCR = GCR;U1BAUD = BAUD;分别设置波特率指数值和波特率小数部分的值;执行UTX1IF = 0;将UART1 TX传送中断标志初始置为0;执行IEN0 |= 0x84;开启总中断和接收中断,使能USART1 RX中断。
5. 若Ux的值既不为USART0也不为USART1,则函数执行结束。
这样,UART初始化函数就根据传入的参数Ux完成了对相应的串口通信模块的初始化。
阅读全文