串口uart编程——基于imx6ull

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*/
  

你可能感兴趣的:(imx6ull,uart)