社区导航

 

搜索
查看: 3300|回复: 9

如何用程序控制I/O口使得输出低电平以开启SIM300模块?

[复制链接]

109

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2008-11-24 14:28 | 显示全部楼层 |阅读模式
各位大虾:
   今遇到一棘手问题:程序在使用SIM300模块进行通信的时候,发现SIM300模块开启的时候需要给它的PWRKEY引脚供低电平2秒钟,我怎么写程序能控制PWRKEY引脚呢?我用的是2440,硬件的连接我不清楚,但我估计应该是使用通用I/O连接的。

ps:是否应用程序无能为力?要写驱动程序?
哪位大虾给个提示,谢谢!

100

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2008-11-24 15:25 | 显示全部楼层
应用与驱动实现都可以,看你想怎么做了!

回复

使用道具 举报

111

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2008-11-24 15:27 | 显示全部楼层
是要写驱动程序,不过非常简单,如果有需要的话给我发邮件liukun0408@126.com

回复

使用道具 举报

117

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2008-11-24 15:33 | 显示全部楼层
驱动中完成非常简单。参考一下wince 的GPIO操作。

回复

使用道具 举报

116

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2008-11-24 16:11 | 显示全部楼层
用evc写可以吗?

回复

使用道具 举报

103

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2008-11-25 09:25 | 显示全部楼层
如果是用CE5.0的平台的话可以用EVC来写,但必须知道其硬件的连接,也就是用哪根GPIO来拉低电平
如果是CE6的话估计就不行了,只能在驱动级实现,然后通过IOCTL由AP来调用

回复

使用道具 举报

107

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2008-11-25 09:38 | 显示全部楼层
  1. //------------------以GPG8,GPG9口为例子---------------------
  2. // Pointer to device control registers
  3. volatile S3C2440A_IOPORT_REG *v_pIOPregs;

  4. BOOL InitializeAddresses(VOID)
  5. {
  6.         BOOL        RetValue = TRUE;
  7.        
  8.         /* IO Register Allocation */
  9.         //RETAILMSG(1,(TEXT("GPG Run Test: %u \r\n"), v_pIOPregs->GPGDAT));
  10.         DEBUGMSG(ZONE_PDD, (_T("NLedDriverInitialize: invoked2\r\n")));
  11.         v_pIOPregs = (volatile S3C2440A_IOPORT_REG *)VirtualAlloc(0, sizeof(S3C2440A_IOPORT_REG), MEM_RESERVE, PAGE_NOACCESS);
  12.         if (v_pIOPregs == NULL)
  13.         {
  14.                 ERRORMSG(1,(TEXT("For IOPregs : VirtualAlloc failed!\r\n")));
  15.                 DEBUGMSG(ZONE_PDD, (_T("NLedDriverInitialize:VirtualAlloc  fail\r\n")));
  16.                 RetValue = FALSE;
  17.         }
  18.         else
  19.         {
  20.                 if (!VirtualCopy((PVOID)v_pIOPregs, (PVOID)(S3C2440A_BASE_REG_PA_IOPORT >> 8), sizeof(S3C2440A_IOPORT_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE))
  21.                 {
  22.                         ERRORMSG(1,(TEXT("For IOPregs: VirtualCopy failed!\r\n")));
  23.                         DEBUGMSG(ZONE_PDD, (_T("NLedDriverInitialize:VirtualCopy failed\r\n")));
  24.                         RetValue = FALSE;
  25.                 }
  26.         }
  27.         if (!RetValue)
  28.         {
  29.                 if (v_pIOPregs)
  30.                 {
  31.                         VirtualFree((PVOID) v_pIOPregs, 0, MEM_RELEASE);
  32.                 }

  33.                 v_pIOPregs = NULL;
  34.         }

  35.         return(RetValue);
  36. }

  37. BOOL WINAPI
  38. NLedDriverInitialize(
  39.                     VOID
  40.                     )
  41. {
  42.     //DEBUGMSG(ZONE_PDD, (_T("NLedDriverInitialize: invoked\r\n")));
  43.         //现在可行了,这个打印函数有了
  44.         RETAILMSG(1,(TEXT("---------NLedDriverInitialize---------\r\n")));
  45.     if (!InitializeAddresses())
  46.             return (FALSE);

  47.     //----------GPG8 Setting------------
  48.     v_pIOPregs->GPGCON  &= ~(0x3 << 16);
  49.     v_pIOPregs->GPGCON  |=  (0x1 << 16);
  50.     v_pIOPregs->GPGDAT  &= ~(0x1 << 8);//输出低电平
  51.         v_pIOPregs->GPGDAT  |= (0x1 << 8);//输出高电平
  52.     v_pIOPregs->GPGUP   |=  (0x1 << 8);//禁止上拉,在上电没有执行程序的时候上拉高电平输出
  53.     //v_pIOPregs->GPGUP   &= ~(0x1 << 8);//使能上拉

  54.         DEBUGMSG(ZONE_PDD, (_T("TEST GPG8 run\r\n")));

  55.         //----------GPG9 Setting------------
  56.     v_pIOPregs->GPGCON  &= ~(0x3 << 18);
  57.     v_pIOPregs->GPGCON  |=  (0x1 << 18);
  58.     v_pIOPregs->GPGDAT  &= ~(0x1 << 9);//输出低电平
  59.         //v_pIOPregs->GPGDAT  |= (0x1 << 9);//输出高电平
  60.     v_pIOPregs->GPGUP   |=  (0x1 << 9);//禁止上拉,在上电没有执行程序的时候上拉高电平输出
  61.     //v_pIOPregs->GPGUP   &= ~(0x1 << 9);//使能上拉
  62.         DEBUGMSG(ZONE_PDD, (_T("TEST GPG9 run\r\n")));

  63.     gLEDThread= CreateThread(0, 0, (LPTHREAD_START_ROUTINE) NLED_Thread, 0, 0, 0);

  64.     return (TRUE);
  65. }
复制代码

回复

使用道具 举报

104

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2008-11-25 15:09 | 显示全部楼层
S3C2440A_IOPORT_REG这些变量定义是否要安装了platform builder之后才有啊?

回复

使用道具 举报

93

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2008-11-25 15:39 | 显示全部楼层
BSP里定义的,跟PB没有关系

回复

使用道具 举报

109

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2009-8-15 22:20 | 显示全部楼层
这年头,好东西都隐藏了

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-2-17 15:04 , Processed in 0.307717 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表