7034|2

2

帖子

1

TA的资源

一粒金砂(初级)

楼主
 

Beaglebone black中QNX操作系统LED驱动问题 [复制链接]

1芯积分
本帖最后由 传说哥 于 2015-10-19 10:59 编辑

本人购买了Beaglebone black开发板,并从QNX官网下载了针对该板卡的BSP
http://community.qnx.com/sf/wiki ... i/TiAm335Beaglebone
仿照BSP中led.c文件中int doleds(unsigned char ch)
  1. BSP中led.c文件中的int doleds(unsigned char ch)
  2. int doleds(unsigned char ch)
  3. {
  4.         uintptr_t        gpio_base;
  5.         uint32_t        val;

  6.     // Map device registers
  7.     gpio_base = mmap_device_io(AM335X_GPIO_SIZE, AM335X_GPIO1_BASE);
  8.     if(gpio_base == MAP_DEVICE_FAILED)
  9.     {
  10.         perror("Can't map device I/O");
  11.         return 0;
  12.     }

  13.     // Read GPIO output enable register
  14.     //  0 The corresponding GPIO port is configured as an output.
  15.     //  1 The corresponding GPIO port is configured as an input.
  16.     val  = in32(gpio_base + GPIO_OE);
  17.     val &= ~(LED0|LED1|LED2|LED3);
  18.     out32(gpio_base + GPIO_OE, val);

  19.     // Write GPIO data output register
  20.     val  = in32(gpio_base + GPIO_DATAOUT);
  21.     val &= ~(LED0|LED1|LED2|LED3);
  22.     val |= (LEDS(ch));
  23.     out32(gpio_base + GPIO_DATAOUT, val);

  24.     munmap_device_io(gpio_base, AM335X_GPIO_SIZE);

  25.     return 1;
  26. }
复制代码
写了如下代码来驱动LED显示。
结果是报执行到val  = in32(gpio_base + GPIO_OE)有误,in32()调用有误。
我对比了自己写的代码和BSP中的代码,感觉自己的代码没有问题,求高手指点问题出在哪里了?
  1. #include <stdlib.h>
  2. #include <stdio.h>

  3. #include <errno.h>
  4. #include <stdio.h>
  5. #include <stddef.h>
  6. #include <stdlib.h>
  7. #include <unistd.h>
  8. #include <string.h>
  9. #include <sys/mman.h>
  10. #include <hw/inout.h>

  11. #include "am335x.h"

  12. #include <sys/iofunc.h>
  13. #include <sys/dispatch.h>


  14. #define LED0        (1<<21)
  15. #define LED1        (1<<22)
  16. #define LED2        (1<<23)
  17. #define LED3        (1<<24)
  18. #define LEDS(n)        ((n&0xf)<<21)

  19. int main(void)
  20. {
  21.     uintptr_t    gpio_base;
  22.     uint32_t    val;
  23.     unsigned char ch =10;

  24.     if (ThreadCtl(_NTO_TCTL_IO, 0) == -1) {
  25.                 perror("ThreadCtl");
  26.                 exit(EXIT_FAILURE);
  27.             }
  28.         // Map device registers

  29.        gpio_base = mmap_device_io(AM335X_GPIO_SIZE, AM335X_GPIO1_BASE);
  30.         if(gpio_base == MAP_DEVICE_FAILED)
  31.         {
  32.             perror("Can't map device I/O");
  33.             return 0;
  34.         }

  35.         // Read GPIO output enable register
  36.         //  0 The corresponding GPIO port is configured as an output.
  37.         //  1 The corresponding GPIO port is configured as an input.
  38.         val  = in32(gpio_base + GPIO_OE);
  39.         val &= ~(LED0|LED1|LED2|LED3);
  40.         out32(gpio_base + GPIO_OE, val);

  41.         // Write GPIO data output register
  42.         val  = in32(gpio_base + GPIO_DATAOUT);
  43.         val &= ~(LED0|LED1|LED2|LED3);
  44.         val |= (LEDS(ch));
  45.         out32(gpio_base + GPIO_DATAOUT, val);

  46.         munmap_device_io(gpio_base, AM335X_GPIO_SIZE);

  47. }
复制代码
使用shell命令看运行结果为:



最新回复

按照贴的程序编译运行了一下,没有报错  详情 回复 发表于 2017-11-3 16:47
点赞 关注

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你使用debug模式一步一步跟踪看一下,到底是哪一行除了问题。
 
 

回复

525

帖子

235

TA的资源

版主

板凳
 
按照贴的程序编译运行了一下,没有报错
 
个人签名爱电子,爱生活
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表