⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 blackfin的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 + -