1.main.c
#include "uart.h"
void delay(volatile int d)
{
while(d--);
}
int main(void)
{
char c;
uart_init();
while(1)
{
c = getchar();
putchar(c);
putchar(c+1);
}
return 0;
}
2.uart.c
/*
设置uart的总时钟寄存器:CCM_CSCDR1;地址:20C_4024h;设置的位bit0-5:000000;bit6:0(80m)
给uart1提供时钟寄存器:CCM_CCGR5;地址:20C_407Ch;设置的位:24-25:设置为11
配置引脚功能寄存器:SW_MUX_CTL_PAD_UART1_TX_DATA;地址:20E_0084h;设置的位:0-3:设置为0000
SW_MUX_CTL_PAD_UART1_RX_DATA;地址:20E_0088h;设置的位:0-3:设置为0000
imx6ull中对uart的特殊要求寄存器:UART1_RX_DATA_SELECT_INPUT;地址:20E_0624h;设置的位:bit0-1:设置为11
设置波特率寄存器:UARTx_UBIR和UARTx_UBMR;地址:202_00A4和202_00A8;
设置数据格式寄存器:UART1_UCR2;地址:202_0084
imx6ull芯片要求必须设置寄存器:UART1_UCR3;地址:202_0088;设置的位:bit2必须是1(很奇怪,既然必须是1,那为什么不直接定死)
使能uart1寄存器:UARTx_UCR1;地址:201_8080;设置的位:bit0:设置为1
*/
#include "uart.h"
/*根据IMX6ULL芯片手册<<55.15 UART Memory Map/Register Definition>>的3608页,定义UART的结构体,*/
typedef struct {
volatile unsigned int URXD; /**< UART Receiver Register, offset: 0x0 串口接收寄存器,偏移地址0x0 */
unsigned char RESERVED_0[60];
volatile unsigned int UTXD; /**< UART Transmitter Register, offset: 0x40 串口发送寄存器,偏移地址0x40*/
unsigned char RESERVED_1[60];
volatile unsigned int UCR1; /**< UART Control Register 1, offset: 0x80 串口控制寄存器1,偏移地址0x80*/
volatile unsigned int UCR2; /**< UART Control Register 2, offset: 0x84 串口控制寄存器2,偏移地址0x84*/