資源簡介
Android系統中上層UI是使用Java語言完成的,涉及到底層驅動的話,需要SO庫(JNI層)的連接。所以針對LED控制,將從底層驅動、JNI層SO連接庫和上層UI界面進行設計。
此處LED驅動程式采用動態編譯,可隨時進行修改、編譯和載入驅動。但需要手動加載驅動和創建設備節點.

代碼片段和文件信息
/*?linux/drivers/dmatek/pad4412_led/led.c
?*
?*?DMATEK
?*?lyp
?*?2016.04.12
?*
?*/
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#define?LED_ON??1
#define?LED_OFF?0
#define?LED_MAJOR?230
#define?led_name?“led“
#define?EXYNOS4412_baseADDR ???0x11400000
#define?EXYNOS4412_GPK3CON????(*?(volatile?unsigned?int?*)0x114000A0)//(EXYNOS4412_baseADDR?+?0xA0)??
#define?EXYNOS4412_GPK3DAT ??(*?(volatile?unsigned?int?*)0x114000A4)//(EXYNOS4412_baseADDR?+?0xA4)
#define?GPIO_GPK3_LED18???????EXYNOS4_GPK3(3)?????//led?18
#define?GPIO_GPK3_LED19???????EXYNOS4_GPK3(4)?????//led?19
static?void?led_off(int?led_num)
{
//int?gpk3dat;
//gpk3dat?=?__raw_readl(EXYNOS4412_GPK3DAT);
switch(led_num)
{
case?1: //led1
//gpk3dat?&=~(1<<3); //D18
gpio_direction_output(GPIO_GPK3_LED180);
break;
case?2: //led2
//gpk3dat?&=~(1<<4); //D19
gpio_direction_output(GPIO_GPK3_LED190);
break;
default:
break;
}
//__raw_writel(gpk3datEXYNOS4412_GPK3DAT);
}
static?void?led_on(int?led_num)
{
//int?gpk3dat;
//gpk3dat?=?__raw_readl(EXYNOS4412_GPK3DAT);//S3C_GPBDAT
switch(led_num)
{
case?1: //led1
//gpk3dat?|=?(1<<3); //D18
gpio_direction_output(GPIO_GPK3_LED181);
break;
case?2: //led2
//gpk3dat?|=?(1<<4); //D19
gpio_direction_output(GPIO_GPK3_LED191);
break;
default:
break;
}
//__raw_writel(gpk3datEXYNOS4412_GPK3DAT);
}
static?ssize_t?led_read(struct?file?*file?char?__user?*buf?size_t?count?loff_t?*offset)
{
return?count;
}
static?ssize_t?led_write(struct?file?*file?const?char?__user?*buf?size_t?count?loff_t?*offset)
{
return?0;
}
static?int?led_open(struct?inode?*inode?struct?file?*file)
{
printk(“led_open?+++++++1\n“?);
gpio_direction_output(GPIO_GPK3_LED180);
gpio_direction_output(GPIO_GPK3_LED190);
/*unsigned?int?val;
val?=?readl(EXYNOS4412_GPK3CON);
val?&=?~?(0xff?<<0);
val?|=?(1?<12)|(1<<16);
writel(val?EXYNOS4412_GPK3CON); //將GPK3和GPK4設置為輸出模式
val?=?readl(EXYNOS4412_GPK3DAT);
val?&=?~?((1?<<3)|(1<<4));
writel(val?EXYNOS4412_GPK3DAT); //將GPK3和GPK4置為低*/
printk(“led_open?-------1\n“?);
return?0;
}
/* release?command?for?led?device?file */
static?int?led_close(struct?inode?*inode?struct?file?*file)
{
// printk(“led_close?+++1\n“);
return?0;
}
/* ioctl?command?for?led?device?file */
//static?int?led_ioctl(struct
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????4533??2016-04-13?09:42??led.c
?????文件???????63792??2016-04-12?17:53??led.ko
?????文件?????????402??2016-04-12?10:09??Makefile
- 上一篇:Android TCP_Client
- 下一篇:intelHaxm.exe
評論
共有 條評論