下面就涉及到RTEMS的语法和以C语言为主的驱动编程
rki的shell界面之前已经提过,现在增加_cmd文件测试
完成寄存器的地址映射
#include <stdio.h>
#include <stdlib.h>
#include <bsp.h>
#define Control_Module_Registers1 (*(volatile uint32_t *)(0x44E10000+0x984))
#define UART1_THR (*(volatile uint32_t *)(BEAGLE_BASE_UART_2+0x00))
#define UART1_RHR (*(volatile uint32_t *)(BEAGLE_BASE_UART_2+0x00))
#define UART1_IER (*(volatile uint32_t *)(BEAGLE_BASE_UART_2+0x04))
#define UART1_DLL (*(volatile uint32_t *)(BEAGLE_BASE_UART_2+0x00))
#define UART1_DLM (*(volatile uint32_t *)(BEAGLE_BASE_UART_2+0x04))
#define UART1_LCR (*(volatile uint32_t *)(BEAGLE_BASE_UART_2+0x0c))
#define UART1_LSR (*(volatile uint32_t *)(BEAGLE_BASE_UART_2+0x14))
#define UART1_MDR1 (*(volatile uint32_t *)(BEAGLE_BASE_UART_2+0x20))
#define UART1_SYSC (*(volatile uint32_t *)(BEAGLE_BASE_UART_2+0x54))
#define UART1_SYSS (*(volatile uint32_t *)(BEAGLE_BASE_UART_2+0x58))
#define TX_FIFO_E (1<<5)
#define RX_FIFO_E (1<<0)
发送函数:
int uart_send_command(rtems_task_argument ignored)
{
uint32_t div;
Control_Module_Registers1 = 0x00;
UART1_SYSC = 2; // software reset
while((UART1_SYSS & 1) == 0) ;