wince 启动停止了。

jiereliyi 2009-09-28 05:01:33
我在编写流驱动的时候,系统启动突然停止了。
串口输出信息:
[dm9: Tries to map io space with 18000000
[dm9: The mapped address is D0B80000
[dm9: Chip signature is 90000A46
[dm9: Chip signature is 90000A46
<DM9:--MiniportInitialize>
STRINGS:***@@****DLL_PROCESS_ATTACH******
MYSTRINGGS:**@@*******InitKey_Init***********
*@@**********KeyInt_Setting***********

流驱动部分代码。
DWORD KEY_Init(DWORD dwContext)
{ // if you drive a idiographic device,add oter code ep: int,hardwareinit and so on
DWORD IDINTThread;
RETAILMSG(1,(TEXT("MYSTRINGGS:**@@*******InitKey_Init***********\n")));
//clear the ram which is used for this dll

InitializeAddresses();
INTInit();

RETAILMSG(1,(TEXT("@before CreateThread \r\n")));
Key_Key_Thread = CreateThread(0,0,(LPTHREAD_START_ROUTINE)Key_KeyThread_Fun,0,0,&IDINTThread);
if(!Key_Key_Thread)
{
RETAILMSG(1,(TEXT("@CreateThread faile \r\n")));
return FALSE;
}
else
{
RETAILMSG(1,(TEXT("@CreateThread OK \r\n")));
}
Key_KeyIntr_Event = CreateEvent(NULL,false,false,NULL);
if(!Key_KeyIntr_Event)
{
RETAILMSG(1,(TEXT("@CreateEvent faile \r\n")));
return FALSE;
}
else
{
RETAILMSG(1,(TEXT("@CreateEvent OK \r\n")));
}
。。。。。。。。
。。。。。。。
}
BOOL INTInit()

{
RETAILMSG(1,(TEXT("*@@**********KeyInt_Setting***********\r\n")));

v_pIOPregs->GPFCON &= ~(0x3 << 2); /* Set EINT1(GPF1) as EINT1 */
v_pIOPregs->GPFCON |= (0x2 << 2);

v_pIOPregs->EXTINT1 &= ~(0x7 << 3);
v_pIOPregs->EXTINT1 |= (0x2 << 3); /* Configure EINT1 as Falling Edge Mode */

return TRUE;
}
初学,不知道哪里出问题了。帮忙分析下。
...全文
75 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiereliyi 2009-09-29
  • 打赏
  • 举报
回复

终于完成了,第一个按键中断程序,太高兴了,谢谢给我帮助的朋友们,呵呵。
v_pIOPregs->EXTINT1 &= ~(0x7 < < 3);
v_pIOPregs->EXTINT1 |= (0x2 < < 3); /* Configure EINT1 as Falling Edge Mode */
这里寄存器设置不对。应该是
v_pIOPregs->EXTINT0 &= ~(0x7 << 4);
v_pIOPregs->EXTINT0 |= (0x2 << 4);
一会具体分析下
jiereliyi 2009-09-29
  • 打赏
  • 举报
回复
volatile S3C2440A_IOPORT_REG *v_pIOPregs;
S3C2440A_IOPORT_REG 结构体定义是:
typedef struct {
UINT32 GPACON; // Port A - offset 0
UINT32 GPADAT; // Data
UINT32 PAD1[2];

UINT32 GPBCON; // Port B - offset 0x10
UINT32 GPBDAT; // Data
UINT32 GPBUP; // Pull-up disable
UINT32 PAD2;

UINT32 GPCCON; // Port C - offset 0x20
UINT32 GPCDAT; // Data
UINT32 GPCUP; // Pull-up disable
UINT32 PAD3;

UINT32 GPDCON; // Port D - offset 0x30
UINT32 GPDDAT; // Data
UINT32 GPDUP; // Pull-up disable
UINT32 PAD4;

UINT32 GPECON; // Port E - offset 0x40
UINT32 GPEDAT; // Data
UINT32 GPEUP; // Pull-up disable
UINT32 PAD5;

UINT32 GPFCON; // Port F - offset 0x50
UINT32 GPFDAT;
UINT32 GPFUP;
UINT32 PAD6;

UINT32 GPGCON; // Port G - offset 0x60
UINT32 GPGDAT;
UINT32 GPGUP;
UINT32 PAD7;

UINT32 GPHCON; // Port H - offset 0x70
UINT32 GPHDAT;
UINT32 GPHUP;
UINT32 PAD8;

UINT32 MISCCR; // misc control reg - offset 0x80
UINT32 DCLKCON; // DCLK0/1 control reg

UINT32 EXTINT0; // external interrupt control reg 0
UINT32 EXTINT1; // external interrupt control reg 1
UINT32 EXTINT2; // external interrupt control reg 2

UINT32 EINTFLT0; // reserved
UINT32 EINTFLT1; // reserved
UINT32 EINTFLT2; // external interrupt filter reg 2
UINT32 EINTFLT3; // external interrupt filter reg 3

UINT32 EINTMASK; // external interrupt mask reg
UINT32 EINTPEND; // external interrupt pending reg

UINT32 GSTATUS0; // external pin status
UINT32 GSTATUS1; // chip ID
UINT32 GSTATUS2; // reset status
UINT32 GSTATUS3; // inform register
UINT32 GSTATUS4; // inform register

UINT32 FLTOUT; // C0 - added by simon
UINT32 DSC0;
UINT32 DSC1;
UINT32 MSLCON;

UINT32 GPJCON; // D0
UINT32 GPJDAT;
UINT32 GPJUP;
UINT32 PDA9;

} S3C2440A_IOPORT_REG, *PS3C2440A_IOPORT_REG;

里边包含 UINT32 EXTINT0; UINT32 EXTINT1; UINT32 EXTINT2; 看来不用S3C2440A_BASE_REG_PA_INTR做虚拟地址映射啊

jiereliyi 2009-09-29
  • 打赏
  • 举报
回复
void InitializeAddresses()
{

// INT Virtual alloc
v_pIOPregs = (volatile S3C2440A_IOPORT_REG *) VirtualAlloc(0,sizeof(S3C2440A_IOPORT_REG),MEM_RESERVE, PAGE_NOACCESS);
if(v_pIOPregs == NULL)
{
RETAILMSG(1,(TEXT("@For S2440IOP: VirtualAlloc faiLED!\r\n")));
}
else
{
if(!VirtualCopy((PVOID)v_pIOPregs,(PVOID)(S3C2440A_BASE_REG_PA_IOPORT>>8),sizeof(S3C2440A_IOPORT_REG),PAGE_PHYSICAL|PAGE_READWRITE|PAGE_NOCACHE ))
{
RETAILMSG(1,(TEXT("@For S2440IOP: VirtualCopy faiLED!\r\n")));
}
}

}
我这样分配地址不可以吗?
其中有。
#define S3C2440A_BASE_REG_PA_IOPORT (0x56000000)
我用到了中断是不是也要用S3C2440A_BASE_REG_PA_INTR做一下虚拟地址映射啊
#define S3C2440A_BASE_REG_PA_INTR (0x4A000000)
-小仙- 2009-09-28
  • 打赏
  • 举报
回复
一、v_pIOPregs 地址问题:

KEY_Init 在这里面只留下INTInit(); 屏蔽掉其他的
然后看正确不!

如果不正确就是v_pIOPregs 地址有问题

二、
你的设置 如终端的设置 影响到了其他的驱动 导致起不来
xuefeng_baggio 2009-09-28
  • 打赏
  • 举报
回复
是不是v_pIOPregs寄存器没有分配地址呀?这样会出错的!

19,520

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧