查看: 5486|回复: 7

[MQX] MQX+IAR库编译时如果GPIO不使能,在程序怎样让某个口为GPIO?

[复制链接]

该用户从未签到

3

主题

22

帖子

0

新手上路

Rank: 1

积分
32
最后登录
1970-1-1
发表于 2012-3-14 18:08:32 | 显示全部楼层 |阅读模式
最近一直在弄库编译的问题,弄的很是伤心,想弄个简单的,在MQX例程gpio里面要求user_config.h文件里#define BSPCFG_ENABLE_RTCDEV     1 。 我不知道这个意味着什么,是不是意味着所有的口都当做GPIO来使用?
如果是这样,那别的功能都不能用了吗?还是?
如果我让#define BSPCFG_ENABLE_RTCDEV     0,那我在程序里怎么写代码就可以让某个口有GPIO功能啊?我尝试了在一个例程C:\Program Files\Freescale\Freescale MQX 3.8\mqx\examples\can\flexcan里面 的主任务里面  加了一下语句,这些语句是在IAR的GPIO例程(非多任务)里面看到的
SIM_SCGC5 = SIM_SCGC5_PORTA_MASK | SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK;   
init_gpio();
    GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));  
    GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));   
    GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));   
    GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));
我在debug时,发现这些语句不起作用,不像IAR那个例程有作用,我不知道这是为什么?请指教
我知道答案 目前已有6人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-3-14 21:11:53 | 显示全部楼层

    RE:MQX+IAR库编译时如果GPIO不使能,在程序怎样让某个口为GPIO?

    #define BSPCFG_ENABLE_RTCDEV 这个是用于RTC的和GPIO没有关系的。
    BSPCFG_ENABLE_GPIODEV    这个才使和GPIO相关的。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    22

    帖子

    0

    新手上路

    Rank: 1

    积分
    32
    最后登录
    1970-1-1
     楼主| 发表于 2012-3-15 08:42:07 | 显示全部楼层

    回复:MQX+IAR库编译时如果GPIO不使能,在程序怎样让某个口为GPIO?

    不好意思啊,我的本意是指#define BSPCFG_ENABLE_GPIODEV    0
    昨天晚上搞的昏昏沉沉的,黏贴错了,两个正好就是隔壁
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    22

    帖子

    0

    新手上路

    Rank: 1

    积分
    32
    最后登录
    1970-1-1
     楼主| 发表于 2012-3-15 09:07:04 | 显示全部楼层

    回复:MQX+IAR库编译时如果GPIO不使能,在程序怎样让某个口为GPIO?

    我把那个主任务的程序黏贴下,请大家帮我分析下,我实在是个菜鸟,不明所以啊
    void Main_Task(uint_32 parameter)
    { /* Body */
       _task_id     created_task;
       uint_32 result;
    MQX_FILE_PTR port_file1;
       _int_install_unexpected_isr();
    //以下几句话是照搬IAR安装目录下的GPIO的程序里面的语句
      SIM_SCGC5 = SIM_SCGC5_PORTA_MASK | SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK;   
    init_gpio();
        GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));  //当编译库GPIO不管有没有使能,debug到这里灯都没有反应,我的板子四个灯是PTE9 10 11 12
        GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));   
        GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));    
        GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));
    //我原以为经过上面一段,如果库编译GPIO不使能,PTE11应该有反应的呀,但实际没有,我不知道问题出在哪里了
    //以下语句是照搬MQX下的GPIO例程,其中BSP_LEDx在twrk60那个.h被我自己改成我的板子的 PTE9 10 11 12
    #if defined BSP_LED2 && defined BSP_LED3 && defined BSP_LED4
        #define PINS1
        GPIO_PIN_STRUCT pins1[] = {
            /* when opening, explicitly set output to 0 */
            BSP_LED2 | GPIO_PIN_STATUS_0,
            /* when opening, explicitly set output to 1 */
            BSP_LED3 | GPIO_PIN_STATUS_1,
            /* when opening, implicitly set output to 0 */
            BSP_LED4,
            GPIO_LIST_END
        };
    #endif
    #if defined BSP_LED2
        #define PINS2      
        GPIO_PIN_STRUCT pins2[] = {
            BSP_LED2,
            GPIO_LIST_END
        };
    #endif
     
    /************************************************
     Opening file for write with associated pins,
     write LOG 0 and LOG 1 to file.
    *************************************************/
    #if defined PINS1 && defined PINS2 
       /* open file containing pin1 set of pins/signals */
       if (NULL == (port_file1 = fopen("gpio:write", (char_ptr) &pins1 ))) //如果库编译时GPIO使能的话,debug到这里,三个灯亮;  
    {
    //如果库编译是GPIO不使能的话,debug到这里就进入到{}里面的语句,然后程序阻塞了

           printf("Opening file1 GPIO for pins1 failed.\n");
          _task_block();
       }
      
       GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));   
        GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));   
        GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));   
        GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));  
      
      
       /* write logical 1 to all signals in the file (fast) */
       if (IO_OK != ioctl(port_file1, GPIO_IOCTL_WRITE_LOG1, NULL ))//如果库编译时GPIO使能的话,debug到这里,三个灯灭了;
       {
           printf("Writing to whole file1 failed.\n");
          _task_block();
       }
       /* write logical 0 to the pins/signals listed in pins2 array (slow) */
       if (IO_OK != ioctl(port_file1, GPIO_IOCTL_WRITE_LOG0, &pins2 ))//如果库编译时GPIO使能的话,debug到这里,一个灯亮;
       {
           printf("Writing to pins2 of file1 failed.\n");
          _task_block();
       }
       /* close file1 */
       fclose(port_file1);
    #endif
       created_task = _task_create(0, LED_TASK, 0);//如果库编译时GPIO使能的话,debug到这里,可以产生新建的任务,
    .......
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-3-15 09:51:04 | 显示全部楼层

    RE:MQX+IAR库编译时如果GPIO不使能,在程序怎样让某个口为GPIO?

    你后面注释的是正确运行的结果,还是你理想的结果?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    22

    帖子

    0

    新手上路

    Rank: 1

    积分
    32
    最后登录
    1970-1-1
     楼主| 发表于 2012-3-15 10:04:48 | 显示全部楼层

    RE:MQX+IAR库编译时如果GPIO不使能,在程序怎样让某个口为GPIO?

    双反斜杠是运行的效果,
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    22

    帖子

    0

    新手上路

    Rank: 1

    积分
    32
    最后登录
    1970-1-1
     楼主| 发表于 2012-3-15 10:08:37 | 显示全部楼层

    RE:MQX+IAR库编译时如果GPIO不使能,在程序怎样让某个口为GPIO?

    是实际效果。总体而言就是
    1.如果库编译时GPIO口不使能的话,那 SIM_SCGC5 = SIM_SCGC5_PORTA_MASK | SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK;   
    init_gpio();
        GPIOE_PTOR|=GPIO_PDOR_PDO(GPIO_PIN(11));  
    这几句话没有作用的样子(那个init)gpio()我没哟黏贴出来,那个是没有问题的,我在下面黏贴出来)

    付:
    void init_gpio()
    {
      PORTE_PCR9=(0|PORT_PCR_MUX(1));
      PORTE_PCR10=(0|PORT_PCR_MUX(1));
      PORTE_PCR11=(0|PORT_PCR_MUX(1));
      PORTE_PCR12=(0|PORT_PCR_MUX(1));  
              
      GPIOE_PDDR=GPIO_PDDR_PDD(GPIO_PIN(9) | GPIO_PIN(10) | GPIO_PIN(11) | GPIO_PIN(12) );          
    }
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    22

    帖子

    0

    新手上路

    Rank: 1

    积分
    32
    最后登录
    1970-1-1
     楼主| 发表于 2012-3-15 10:15:50 | 显示全部楼层

    RE:MQX+IAR库编译时如果GPIO不使能,在程序怎样让某个口为GPIO?

    我就是很想知道,如果我在库编译 GPIO不使能的情况下,我怎么写程序就可以让PTE9为GPIO输出口,输出值为0.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-9 12:43 , Processed in 0.118797 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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