VxWorks开发板驱动程序学习之LED
来源:互联网 发布:java三大框架 知乎 编辑:程序博客网 时间:2024/04/30 09:42
今天继续学习开发板上的驱动程序,LED,即IO控制。板子CPU是S3C2410,很老的一块芯片了。
先看原理图:
再来看看相关IO的管脚控制器存器:
于是只须将GPACON的相关位清0,GPBCON的相关位设置为01 即可都配置为输出模式。
以下直接上驱动程序相关代码并做适当说明:
驱动代码
/* hardware access methods */ #define SNGS3C_REG_READ(x,result) ((result) = *(volatile unsigned int *)(x)) #define SNGS3C_REG_WRITE(x,data) (*((volatile unsigned int *)(x)) = (data)) #define SNGS3C_REG_AND(x, data) (*((volatile unsigned int *)(x)) &= (data)) #define SNGS3C_REG_OR(x, data) (*((volatile unsigned int *)(x)) |= (data)) #define SNGS3C_REG_XOR(x, data) (*((volatile unsigned int *)(x)) ^= (data)) // 访问硬件寄存器必须加上volatile关键字,以保证每次读写都是直接操作相关寄存器而不是中间缓存
//============================================================================== // LED 灯IO口初始化 //============================================================================== void Led_Init( void ) { UINT32 dwValReg; //RUN_LED---- GPA22 输出模式,指示开发板运行状态 SNGS3C_REG_READ( rGPACON, dwValReg );//GPA22-[22] dwValReg = dwValReg & 0xFFBFFFFF; SNGS3C_REG_WRITE( rGPACON, dwValReg ); //LED1-LED4---- GPB7-10 输出模式 SNGS3C_REG_READ( rGPBCON, dwValReg );//GPB7\8\9\10-[21:14] dwValReg = dwValReg & 0xFFC03FFF; dwValReg = dwValReg | 0x00154000; SNGS3C_REG_WRITE( rGPBCON, dwValReg ); }
enum _LED_NAME_ { ENUM_LED_LED0 = 0, // 指示灯编号 ENUM_LED_LED1, ENUM_LED_LED2, ENUM_LED_LED3, ENUM_LED_MAXNO, };
// 开关指定LED灯 void Led_OnOff( UINT8 byLedNo, BOOL bState ) { UINT16 i; switch(byLedNo) { case ENUM_LED_LED0: i = 1<<8; break; case ENUM_LED_LED1: i = 1<<7; break; case ENUM_LED_LED2: i = 1<<9; break; case ENUM_LED_LED3: i = 1<<10;break; default: return; } if(bState) SNGS3C_REG_AND(rGPBDAT, (~i)); else SNGS3C_REG_OR(rGPBDAT, i); }
// 运行状态指示灯,反转 void RunLed_Invert(void) //GPA22-[22] { UINT32 i; i=1<<22; SNGS3C_REG_XOR(rGPADAT, i); // 取反 // *(volatile UINT32 *)rGPADAT ^=i; // 取反 }
int Blink_Main( void ) { UINT32 i=0; BOOL j=0; while( 1 ) { RunLed_Invert(); // 运行状态指示灯反转 if(MenuDisp==3) // 触屏指定LED流水灯的时候,各灯依次点亮,依次熄灭 { Led_OnOff(i++,j); if(i>=4){ i=0;j=~j;} } else { for(i=0;i<4;i++) Led_OnOff(i,0); } taskDelay(30); } }
1 0
- VxWorks开发板驱动程序学习之LED
- VxWorks开发板驱动程序学习之IIC
- VxWorks开发板驱动程序学习之KEY
- VxWorks开发板驱动程序学习之SPI
- VxWorks开发板驱动程序学习之普通ADC驱动
- VxWorks开发板驱动程序学习之LCD(2.2寸)
- VxWorks开发板驱动程序学习之内部UART0
- VxWorks开发板驱动程序学习之SD卡
- VxWorks开发板驱动程序学习之文件系统(一)
- exynos4412开发板LED驱动程序
- Jz2440开发板led驱动程序
- Linux学习之Led驱动程序理解
- S3C2440 LED驱动程序学习
- S3C2440 LED驱动程序学习
- linux-2.6.32在mini2440开发板上移植(16)之LED 驱动程序移植
- linux-2.6.32在mini2440开发板上移植(16)之LED 驱动程序移植
- linux-2.6.32在mini2440开发板上移植(16)之LED 驱动程序移植
- 第19章 驱动开发之LED驱动程序
- log4j.properties 详解与配置步骤 (转)
- 【学习笔记】解析STL(标准模板库)
- Android系统源码导入到eclipse
- 浅析求素数算法
- poj 1258
- VxWorks开发板驱动程序学习之LED
- tomcat中server.xml参数详解
- iOS开发Debug之The certificate used to sign "XXX" has either expired or has been revoked。
- 无限轮播
- ehcache使用详解
- H264中I帧和IDR帧的区别
- IE8 ajax缓存
- androidstudio 去掉标题
- mac os安装open cv2 for python