关于S3C6410、WinCe系统下通过I/0流驱动初始化LED的问题!

时间:2020-12-16 19:46:38
网上找了好几天资料,都没很具体的介绍,只能自己琢磨。有个问题,希望有人能回答下,感激不尽。

1.通过对I/O流驱动的开发,在初始化XXX_Init()函数中对寄存器进行设置后,开发板启动后,LED灯是否应该是根据自己写的寄存器状态来显示的?
  从PDF来看GPM0~3是LED灯的4个I/O口。寄存器GPMCON设置为OUT、GMPPUD设置为上拉、GPMDAT设置为00001(应该是亮一个灯是吗?)

以下是我初始化的代码,望高人指点迷津:

#include <bsp.h>
#include "Led.h"
#include "s3c6410_gpio.h"
#include "s3c6410_base_regs.h"

//GPIO Virtual Address
volatile S3C6410_GPIO_REG *v_pIOPregs = NULL;

DWORD LED_Init(LPCTSTR PContext, LPCVOID lpvBuscontext)
{
PHYSICAL_ADDRESS ioPhysicalBase = {0,0};
ioPhysicalBase.LowPart = S3C6410_BASE_REG_PA_GPIO;
// 得到GPIO 寄存器的地址 
v_pIOPregs = (S3C6410_GPIO_REG *)MmMapIoSpace(ioPhysicalBase, sizeof(S3C6410_GPIO_REG), FALSE);
if (v_pIOPregs == NULL)
{
return FALSE;
}
v_pIOPregs->GPMCON = (v_pIOPregs->GPMCON | 0x00111111);
v_pIOPregs->GPMPUD = (v_pIOPregs->GPMPUD | 0x000002aa);
v_pIOPregs->GPMDAT = ~(v_pIOPregs->GPMDAT & 0xfffffffe);
return 1;



15 个解决方案

#1


楼主说的开发板启动是指什么状态,是上电后开启的过程中,还是说已经出现桌面了。

首先,看你的驱动是否是自动加载的,还是说需要你自己手动加载的,根据这个不同,可能LED显示出你要的效果的时间也不同;
其次,注意硬件电路的设计和在bsp中是否有其他地方使用了该IO端口,如果有的话可能会影响你的显示结果。

#2


wince系统启动的时候,NK加载设备管理器device.dll
device.dll会加载总线驱动,然后到注册表BuiltIn下枚举系统注册的流驱动。
如果你自己编写的流驱动已经配置好,包括注册表。
那系统就会进入你的XXX_Init函数,从而设置IO寄存器,LED灯应该根据你寄存器的设置亮灭。
你可以在这个函数里面加串口信息,看看系统启动的时候是否进入到了XXX_Init函数。

#3


这段代码看不出什么问题。。。
lz可以通过串口打印调试信息,看看驱动是否加载,初始化是否执行

#4


#5


引用楼主 stevejiang 的回复:
网上找了好几天资料,都没很具体的介绍,只能自己琢磨。有个问题,希望有人能回答下,感激不尽。

1.通过对I/O流驱动的开发,在初始化XXX_Init()函数中对寄存器进行设置后,开发板启动后,LED灯是否应该是根据自己写的寄存器状态来显示的?
  从PDF来看GPM0~3是LED灯的4个I/O口。寄存器GPMCON设置为OUT、GMPPUD设置为上拉、GPMDAT设置为00001(应该是亮一……

看下你的电路图,高电平点亮还是低电平点亮....

#6


引用 1 楼 jazka346704803 的回复:
楼主说的开发板启动是指什么状态,是上电后开启的过程中,还是说已经出现桌面了。

首先,看你的驱动是否是自动加载的,还是说需要你自己手动加载的,根据这个不同,可能LED显示出你要的效果的时间也不同;
其次,注意硬件电路的设计和在bsp中是否有其他地方使用了该IO端口,如果有的话可能会影响你的显示结果。


启动是指已经进入系统了,看到WINCE的界面了。
我的理解是首先要先开发BSP中的流驱动,然后编译一个带流驱动的镜像,烧录到开发版中。
我这里写的代码是指已经通过BSP编译,然后通过BSP再生成的系统镜像烧录到开发板中。在INIT中的初始化后似乎灯始终没反应。 不知道该如何判断是否加载成功。

#7


引用 2 楼 northcan 的回复:
wince系统启动的时候,NK加载设备管理器device.dll
device.dll会加载总线驱动,然后到注册表BuiltIn下枚举系统注册的流驱动。
如果你自己编写的流驱动已经配置好,包括注册表。
那系统就会进入你的XXX_Init函数,从而设置IO寄存器,LED灯应该根据你寄存器的设置亮灭。
你可以在这个函数里面加串口信息,看看系统启动的时候是否进入到了XXX_Init函数。


启动是指已经进入系统了,看到WINCE的界面了。
我是个新手,想请教下串口信息如果加入以及可以在哪里可以看到。

#8


引用 7 楼 stevejiang 的回复:
引用 2 楼 northcan 的回复:
wince系统启动的时候,NK加载设备管理器device.dll
device.dll会加载总线驱动,然后到注册表BuiltIn下枚举系统注册的流驱动。
如果你自己编写的流驱动已经配置好,包括注册表。
那系统就会进入你的XXX_Init函数,从而设置IO寄存器,LED灯应该根据你寄存器的设置亮灭。
你可以在这个函数里面加串口信息,看看系统启动的时……

连接你的串口到PC的串口,在简单设置下
超级终端...串口调试助手

#9


通过串口,在超级终端中打印显示
主要是修改debug.c文件,可以参考以下两篇文章
http://blog.csdn.net/androidfan/article/details/5805945
http://gxzx99.blog.163.com/blog/static/12655671620101219531180/
引用 7 楼 stevejiang 的回复:
引用 2 楼 northcan 的回复:
wince系统启动的时候,NK加载设备管理器device.dll
device.dll会加载总线驱动,然后到注册表BuiltIn下枚举系统注册的流驱动。
如果你自己编写的流驱动已经配置好,包括注册表。
那系统就会进入你的XXX_Init函数,从而设置IO寄存器,LED灯应该根据你寄存器的设置亮灭。
你可以在这个函数里面加串口信息,看看系统启动的……

#10


楼上说的对,不过一般debug的函数应该已经提供了的,楼主看一下自己的bsp内容就知道了。用串口查看就像你烧写nk的时候那样,可以从串口看到很多调试信息的,如果楼主没有,我可以给你一份pdf资料,里面会有一些介绍的。

#11


引用 10 楼 jazka346704803 的回复:
楼上说的对,不过一般debug的函数应该已经提供了的,楼主看一下自己的bsp内容就知道了。用串口查看就像你烧写nk的时候那样,可以从串口看到很多调试信息的,如果楼主没有,我可以给你一份pdf资料,里面会有一些介绍的。


那麻烦您发我一份 dingqi_jiang@hotmail.com 谢谢

#12


非常感谢,我试下,您是否以前做过FPGA连接ARM的数据传输?

引用 8 楼 wswwxk 的回复:
引用 7 楼 stevejiang 的回复:
引用 2 楼 northcan 的回复:
wince系统启动的时候,NK加载设备管理器device.dll
device.dll会加载总线驱动,然后到注册表BuiltIn下枚举系统注册的流驱动。
如果你自己编写的流驱动已经配置好,包括注册表。
那系统就会进入你的XXX_Init函数,从而设置IO寄存器,LED灯应该根据你寄存器的设置亮灭。
……

#13


引用 11 楼 stevejiang 的回复:
引用 10 楼 jazka346704803 的回复:

楼上说的对,不过一般debug的函数应该已经提供了的,楼主看一下自己的bsp内容就知道了。用串口查看就像你烧写nk的时候那样,可以从串口看到很多调试信息的,如果楼主没有,我可以给你一份pdf资料,里面会有一些介绍的。


那麻烦您发我一份 dingqi_jiang@hotmail.com 谢谢

已经发送了,其实很多开发板都会带这种使用资料的,里面有关于dnw的使用,你会看到下载bootloader或者nk等都会有很多调试信息从串口中输出的。

#14


楼主可否给我也发一份如何打印调试信息的资料,我最近也在弄一个中断触发arm和fpga通信的问题 也比较不清楚 希望能加好友一起交流 qq:563748383

#15


该回复于2011-12-14 09:02:46被版主删除

#1


楼主说的开发板启动是指什么状态,是上电后开启的过程中,还是说已经出现桌面了。

首先,看你的驱动是否是自动加载的,还是说需要你自己手动加载的,根据这个不同,可能LED显示出你要的效果的时间也不同;
其次,注意硬件电路的设计和在bsp中是否有其他地方使用了该IO端口,如果有的话可能会影响你的显示结果。

#2


wince系统启动的时候,NK加载设备管理器device.dll
device.dll会加载总线驱动,然后到注册表BuiltIn下枚举系统注册的流驱动。
如果你自己编写的流驱动已经配置好,包括注册表。
那系统就会进入你的XXX_Init函数,从而设置IO寄存器,LED灯应该根据你寄存器的设置亮灭。
你可以在这个函数里面加串口信息,看看系统启动的时候是否进入到了XXX_Init函数。

#3


这段代码看不出什么问题。。。
lz可以通过串口打印调试信息,看看驱动是否加载,初始化是否执行

#4


#5


引用楼主 stevejiang 的回复:
网上找了好几天资料,都没很具体的介绍,只能自己琢磨。有个问题,希望有人能回答下,感激不尽。

1.通过对I/O流驱动的开发,在初始化XXX_Init()函数中对寄存器进行设置后,开发板启动后,LED灯是否应该是根据自己写的寄存器状态来显示的?
  从PDF来看GPM0~3是LED灯的4个I/O口。寄存器GPMCON设置为OUT、GMPPUD设置为上拉、GPMDAT设置为00001(应该是亮一……

看下你的电路图,高电平点亮还是低电平点亮....

#6


引用 1 楼 jazka346704803 的回复:
楼主说的开发板启动是指什么状态,是上电后开启的过程中,还是说已经出现桌面了。

首先,看你的驱动是否是自动加载的,还是说需要你自己手动加载的,根据这个不同,可能LED显示出你要的效果的时间也不同;
其次,注意硬件电路的设计和在bsp中是否有其他地方使用了该IO端口,如果有的话可能会影响你的显示结果。


启动是指已经进入系统了,看到WINCE的界面了。
我的理解是首先要先开发BSP中的流驱动,然后编译一个带流驱动的镜像,烧录到开发版中。
我这里写的代码是指已经通过BSP编译,然后通过BSP再生成的系统镜像烧录到开发板中。在INIT中的初始化后似乎灯始终没反应。 不知道该如何判断是否加载成功。

#7


引用 2 楼 northcan 的回复:
wince系统启动的时候,NK加载设备管理器device.dll
device.dll会加载总线驱动,然后到注册表BuiltIn下枚举系统注册的流驱动。
如果你自己编写的流驱动已经配置好,包括注册表。
那系统就会进入你的XXX_Init函数,从而设置IO寄存器,LED灯应该根据你寄存器的设置亮灭。
你可以在这个函数里面加串口信息,看看系统启动的时候是否进入到了XXX_Init函数。


启动是指已经进入系统了,看到WINCE的界面了。
我是个新手,想请教下串口信息如果加入以及可以在哪里可以看到。

#8


引用 7 楼 stevejiang 的回复:
引用 2 楼 northcan 的回复:
wince系统启动的时候,NK加载设备管理器device.dll
device.dll会加载总线驱动,然后到注册表BuiltIn下枚举系统注册的流驱动。
如果你自己编写的流驱动已经配置好,包括注册表。
那系统就会进入你的XXX_Init函数,从而设置IO寄存器,LED灯应该根据你寄存器的设置亮灭。
你可以在这个函数里面加串口信息,看看系统启动的时……

连接你的串口到PC的串口,在简单设置下
超级终端...串口调试助手

#9


通过串口,在超级终端中打印显示
主要是修改debug.c文件,可以参考以下两篇文章
http://blog.csdn.net/androidfan/article/details/5805945
http://gxzx99.blog.163.com/blog/static/12655671620101219531180/
引用 7 楼 stevejiang 的回复:
引用 2 楼 northcan 的回复:
wince系统启动的时候,NK加载设备管理器device.dll
device.dll会加载总线驱动,然后到注册表BuiltIn下枚举系统注册的流驱动。
如果你自己编写的流驱动已经配置好,包括注册表。
那系统就会进入你的XXX_Init函数,从而设置IO寄存器,LED灯应该根据你寄存器的设置亮灭。
你可以在这个函数里面加串口信息,看看系统启动的……

#10


楼上说的对,不过一般debug的函数应该已经提供了的,楼主看一下自己的bsp内容就知道了。用串口查看就像你烧写nk的时候那样,可以从串口看到很多调试信息的,如果楼主没有,我可以给你一份pdf资料,里面会有一些介绍的。

#11


引用 10 楼 jazka346704803 的回复:
楼上说的对,不过一般debug的函数应该已经提供了的,楼主看一下自己的bsp内容就知道了。用串口查看就像你烧写nk的时候那样,可以从串口看到很多调试信息的,如果楼主没有,我可以给你一份pdf资料,里面会有一些介绍的。


那麻烦您发我一份 dingqi_jiang@hotmail.com 谢谢

#12


非常感谢,我试下,您是否以前做过FPGA连接ARM的数据传输?

引用 8 楼 wswwxk 的回复:
引用 7 楼 stevejiang 的回复:
引用 2 楼 northcan 的回复:
wince系统启动的时候,NK加载设备管理器device.dll
device.dll会加载总线驱动,然后到注册表BuiltIn下枚举系统注册的流驱动。
如果你自己编写的流驱动已经配置好,包括注册表。
那系统就会进入你的XXX_Init函数,从而设置IO寄存器,LED灯应该根据你寄存器的设置亮灭。
……

#13


引用 11 楼 stevejiang 的回复:
引用 10 楼 jazka346704803 的回复:

楼上说的对,不过一般debug的函数应该已经提供了的,楼主看一下自己的bsp内容就知道了。用串口查看就像你烧写nk的时候那样,可以从串口看到很多调试信息的,如果楼主没有,我可以给你一份pdf资料,里面会有一些介绍的。


那麻烦您发我一份 dingqi_jiang@hotmail.com 谢谢

已经发送了,其实很多开发板都会带这种使用资料的,里面有关于dnw的使用,你会看到下载bootloader或者nk等都会有很多调试信息从串口中输出的。

#14


楼主可否给我也发一份如何打印调试信息的资料,我最近也在弄一个中断触发arm和fpga通信的问题 也比较不清楚 希望能加好友一起交流 qq:563748383

#15


该回复于2011-12-14 09:02:46被版主删除