imx53 gpio 直接操作物理地址

在直接执行时程序不会死,gdb环境下,在执行 *((unsigned long *) virt_addr) = writeval;写语句时程序无反应  

#define GPIO7_BASE 0x53FE4000  

 if ((fp = fopen("/sys/class/gpio/export", "ab")) == NULL)
                {
                        printf("Cannot open export file.\n");
                        exit(1);
                }
        //Set pointer to begining of the file
                rewind(fp);
                strcpy(set_value,"199");
                fwrite(&set_value, sizeof(char),3, fp);
                fclose(fp);

        //SET DIRECTION
        if ((fp = fopen("/sys/class/gpio/gpio199/direction", "rb+")) == NULL)
        {
                printf("Cannot open direction file.\n");
                exit(1);
        }
        //Set pointer to begining of the file
        rewind(fp);
        strcpy(set_value,"out");
        fwrite(&set_value, sizeof(char), 3, fp);
        fclose(fp);

int fd;

    void *map_base, *virt_addr;
    unsigned long readval, writeval;
    if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1)
    return -1;
    map_base = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, GPIO7_BASE);
    if(map_base == (void *) -1)
        return -1;
    virt_addr = map_base ;
    readval = *((unsigned long *) virt_addr);
    writeval = readval;
while(++i < 5)
{
    writeval &= (~(1<<7));     // GPIO7[7]用户led灯,GPIO 7[6]是 网卡的 phy reset
    *((unsigned int *) virt_addr) = writeval;
    printf("write value:%x.\n",writeval);
    sleep(2);
    writeval |= (1<<7);
    *((unsigned int *) virt_addr) = writeval;
    printf("write value:%x.\n",writeval);
        sleep(2);
}
    if(munmap(map_base, 4096) == -1)
        return -1;
    close(fd);

    return -1;



MX53_PIN_GPIO_19  = _MXC_BUILD_GPIO_PIN(3, 5, 1, 0x20, 0x348),     //3,5:gpio4[5],  1: ALT 1,
                                    //0X20:IOMUXC_SW_MUX_CTL_PAD_GPIO_19(IOMUXC_GPIO_19)  ,0X348: IOMUXC_SW_PAD_CTL_PAD_GPIO_19


    //MX53_PIN_FEC_MDIO = _MXC_BUILD_GPIO_PIN(0, 22, 1,0x248,0x5C4),  P354  gpio1【22】设置为FEC_MDIO, 0x248:MUX ,0x5C4:pad


//base + 0x248  

 mxc_request_iomux(MX53_PIN_FEC_MDIO, IOMUX_CONFIG_ALT0);  //IOMUXC_SW_MUX_CTL_PAD_FEC_MDIO  P2001 FEC_MDIO复用选择ALT0,配置为 MDIO of instance: fec.(000 Select mux mode: ALT0 mux port: MDIO of instance: fec.
001 Select mux mode: ALT1 mux port: GPIO[22] of instance: gpio1.
010 Select mux mode: ALT2 mux port: SCKR of instance: esai1.
011 Select mux mode: ALT3 mux port: COL of instance: fec.
100 Select mux mode: ALT4 mux port: CE_RTC_PS2 of instance: rtc.
101 Select mux mode: ALT5 mux port: DEBUG_BUS_DEVICE[3] of instance: sdma.
110 Select mux mode: ALT6 mux port: EMI_DEBUG[49] of instance: emi.)

//base + 0x5C4
    mxc_iomux_set_pad(MX53_PIN_FEC_MDIO, 0x1FC);    //IOMUXC_SW_PAD_CTL_PAD_FEC_MDIO   p2367  配置端口属性

首先在iomuxc(baseAddr:0x53fa8000)中查找pin,配置复用,再到相应模块配置参数


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值