在直接执行时程序不会死,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,配置复用,再到相应模块配置参数