Nov 5th, 09
/
我今天把网友编译好的Android修改好,主要是修改8寸屏幕的定义部分而已,放到我的MINI2440上运行了一下,能显示菜单能动作,就是速度那简直是太慢了,应该是和8寸屏幕有关系,或许三寸屏幕要好一些。没办法玩了。
最近试了试基于Linux的GUI,结论如下:XFCE相当慢无法用;GNOME Mobile也很慢;Enlightenment还凑合,只是运行其他程序就慢很多了;Android在我的八寸屏幕上无法用,截图我就不发了。
现在就只有耐心的等待友善出WINCE6的BSP了,否则只好弄个WINCE5的系统来玩玩。Linux恐怕还是最好玩玩控制台算了。呵呵。
当然,主要是我的目标太高了,想做个类似于MID的系统,但64M的RAM和400M的CPU,恐怕是有点遗憾呢。
Aug 17th, 09
/
注:本源代码修改自《嵌入式Linux应用开发完全手册》第9章例程,以适用于友善之臂的MINI2440开发板。
整个程序需要关注的是按键的EINT位。由于MIN2440开发板的K1-K4使用的是EINT8、EINT11、EINT13、EINT14,所以必须要修改int.c对应的#define为:
/*
* K1-K4对应GPG0、GPG3、GPG5、GPG6
*/
#define GPG0_eint (2<<(0*2)) //EINT8
#define GPG3_eint (2<<(3*2)) //EINT11
#define GPG5_eint (2<<(5*2)) //EINT13
#define GPG6_eint (2<<(6*2)) //EINT14
由于EINT位置不同,所以初始化irq的时候也需要进行修改,重点是EINTMASK寄存器的值。由于四个中断都连接在ARBITER1的REQ1,所以四个中断优先级相同:
/*
* 初始化GPIO引脚为外部中断
* GPIO引脚用作外部中断时,默认为低电平触发、IRQ方式(不用设置INTMOD)
*/
void init_irq( )
{
GPGCON = GPG0_eint | GPG3_eint | GPG5_eint | GPG6_eint;
// 对于EINT8,11,13,14需要在EINTMASK寄存器中使能它们
EINTMASK &= (~(1<<8)) & (~(1<<11)) & (~(1<<13)) & (~(1<<14));
//EINT8,11,13,14优先级相同
PRIORITY = 0x00 ;
// EINT8,11,13,14使能
INTMSK &= (~(1<<5));
}
另外还需要修改的地方时interrupt.c中中断处理函数。由于这几个中断对应于INTPND的寄存器位[5],所以还得用EINTPEND来区分到底是那个中断源。
void EINT_Handle()
{
unsigned long oft = INTOFFSET;
unsigned long val;
switch( oft )
{
case 5:
{
GPBDAT |= (0x0f<<5); // 所有LED熄灭
val = EINTPEND;
if (val & (1<<8))
GPBDAT &= ~(1<<5); //按K1 LED1亮
if (val & (1<<11))
GPBDAT &= ~(1<<6); //按K2 LED2亮
if (val & (1<<13))
GPBDAT &= ~(1<<7); //按K3 LED3亮
if (val & (1<<14))
GPBDAT &= ~(1<<8); //按K4 LED4亮
if ((val & (1<<8)) && (val & (1<<11))) GPBDAT = 1; //同时按K1K2,所有灯都两
break;
}
default:
break;
}
//清中断
if( oft == 5 )
EINTPEND = (1<<8) | (1<<11) | (1<<13) | (1<<14); // EINT8_23合用IRQ5
SRCPND = 1<
这样修改以后,就可以实现中断的正确响应了。
完整代码下载:
Mini2440_Intrupt (3.4 KiB, 277 hits)