📄 uart.c
字号:
#include <services/services.h>//系统服务程序
#include <drivers/adi_dev.h>//设备管理
#include <drivers/uart/adi_uart.h>//UART设备驱动
#define NUM_BUFFERS (2)//缓冲区数量
static u8 Data[NUM_BUFFERS];//数据存储(接收和发送)
static ADI_DEV_1D_BUFFER Buffer[NUM_BUFFERS]; //缓冲区
static ADI_DEV_DEVICE_HANDLE UARTHandle; //UART句柄
static void CallbackFunction(void *ClientHandle, u32 Event, void *pArg); //回调函数
static void InitSystemServices(void);//初始化系统服务
void main(void) {
u32 i;
u32 Result;//返回代码
ADI_DEV_MANAGER_HANDLE DevMgrHandle; //设备管理句柄
static u8 DevMgrData[ADI_DEV_BASE_MEMORY + (ADI_DEV_DEVICE_MEMORY * 1)];//设备管理存储
ADI_DEV_CMD_VALUE_PAIR UARTConfiguration[] = {
{ ADI_DEV_CMD_SET_DATAFLOW_METHOD, (void *)ADI_DEV_MODE_CHAINED },//
{ ADI_UART_CMD_SET_DATA_BITS, (void *)8 },//数据位
{ ADI_UART_CMD_ENABLE_PARITY, (void *)FALSE },//无校验位
{ ADI_UART_CMD_SET_STOP_BITS, (void *)1 },//停止位
{ ADI_UART_CMD_SET_BAUD_RATE, (void *)57600 },//波特率
{ ADI_DEV_CMD_END, NULL },//
};
InitSystemServices();//初始化系统服务程序
//设备管理初始化
Result = adi_dev_Init(DevMgrData,//设备管理存储区地址
sizeof(DevMgrData),// 存储区大小
&i, //
&DevMgrHandle, //设备管理句柄地址
NULL);//
//打开UART
Result = adi_dev_Open(DevMgrHandle,//设备管理句柄
&ADIUARTEntryPoint,//设备驱动入口
0, //UART
(void *)0x12345678, //客户端句柄
&UARTHandle, //UART句柄地址
ADI_DEV_DIRECTION_BIDIRECTIONAL, //双向数据
NULL,
NULL,
CallbackFunction);//回调函数地址
//配置UART
Result = adi_dev_Control(UARTHandle,
ADI_DEV_CMD_TABLE,
UARTConfiguration);
//创建一维缓冲区
for (i = 0; i < NUM_BUFFERS; i++) {
Buffer[i].Data = &Data[i];
Buffer[i].ElementCount = 1;
Buffer[i].ElementWidth = 1;
Buffer[i].CallbackParameter = &Buffer[i];
Buffer[i].pNext = &Buffer[i+1];
Buffer[i].pAdditionalInfo = (void *)0;
}
Buffer[NUM_BUFFERS - 1].pNext = NULL;
//读取数据
Result = adi_dev_Read(UARTHandle,
ADI_DEV_1D,
(ADI_DEV_BUFFER *)Buffer);
//UART配置
Result = adi_dev_Control(UARTHandle,
ADI_DEV_CMD_SET_DATAFLOW,
(void *)TRUE);
while (1);
}
//回调函数
static void CallbackFunction(void *ClientHandle, u32 Event, void *pArg) {
ADI_DEV_1D_BUFFER *pBuffer;
u32 Result;
pBuffer = (ADI_DEV_1D_BUFFER *)pArg;
switch (Event) {
case ADI_DEV_EVENT_BUFFER_PROCESSED:
if (pBuffer->pAdditionalInfo == 0) {
pBuffer->pAdditionalInfo = (void *)1;
//Data[0]++;
//Data[1]++;
pBuffer->pNext = NULL;
//写数据
Result = adi_dev_Write(UARTHandle,
ADI_DEV_1D,
(ADI_DEV_BUFFER *)pBuffer);
} else {
pBuffer->pAdditionalInfo = (void *)0;
pBuffer->pNext = NULL;
Result = adi_dev_Read(UARTHandle,
ADI_DEV_1D,
(ADI_DEV_BUFFER *)pBuffer);
}
break;
}
}
//系统服务程序
void InitSystemServices(void) {
u32 i;
u32 Result;
ADI_EBIU_SDRAM_BANK_VALUE bank_size;
ADI_EBIU_SDRAM_BANK_VALUE bank_width;
u32 cl_threshold = 100;
ADI_EBIU_TIMING_VALUE twrmin = {1,{7500, ADI_EBIU_TIMING_UNIT_PICOSEC}};
ADI_EBIU_TIMING_VALUE refresh = {8192,{64, ADI_EBIU_TIMING_UNIT_MILLISEC}}; //
ADI_EBIU_TIME trasmin = {44, ADI_EBIU_TIMING_UNIT_NANOSEC}; //
ADI_EBIU_TIME trpmin = {20, ADI_EBIU_TIMING_UNIT_NANOSEC}; //
ADI_EBIU_TIME trcdmin = {20, ADI_EBIU_TIMING_UNIT_NANOSEC}; //
bank_size.value.size = ADI_EBIU_SDRAM_BANK_64MB; //
bank_width.value.width = ADI_EBIU_SDRAM_BANK_COL_10BIT; //
ADI_EBIU_COMMAND_PAIR ezkit_sdram[] = {
{ ADI_EBIU_CMD_SET_SDRAM_BANK_SIZE, (void*)&bank_size },
{ ADI_EBIU_CMD_SET_SDRAM_BANK_COL_WIDTH,(void*)&bank_width },
{ ADI_EBIU_CMD_SET_SDRAM_CL_THRESHOLD, (void*)cl_threshold },
{ ADI_EBIU_CMD_SET_SDRAM_TRASMIN, (void*)&trasmin },
{ ADI_EBIU_CMD_SET_SDRAM_TRPMIN, (void*)&trpmin },
{ ADI_EBIU_CMD_SET_SDRAM_TRCDMIN, (void*)&trcdmin },
{ ADI_EBIU_CMD_SET_SDRAM_TWRMIN, (void*)&twrmin },
{ ADI_EBIU_CMD_SET_SDRAM_REFRESH, (void*)&refresh },
{ ADI_EBIU_CMD_END, 0 }
};
ADI_PWR_COMMAND_PAIR ezkit_power[] = {
{ ADI_PWR_CMD_SET_PROC_VARIANT,(void*)ADI_PWR_PROC_BF533SKBC600 }, //
{ ADI_PWR_CMD_SET_PACKAGE, (void*)ADI_PWR_PACKAGE_MBGA }, //
{ ADI_PWR_CMD_SET_VDDEXT, (void*)ADI_PWR_VDDEXT_330 }, //
{ ADI_PWR_CMD_SET_CLKIN, (void*)ADI_PWR_CLKIN_EZKIT_BF533 }, //
{ ADI_PWR_CMD_END, 0 }
};
//中断初始化
Result = adi_int_Init(NULL,
0,
&i,
NULL);
//EBIU初始化
Result = adi_ebiu_Init(ezkit_sdram,
0);
//电源管理初始化
Result = adi_pwr_Init( ezkit_power );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -