读9200的I/O口读到的都是0
遇到一个非常奇怪的问题:
设置PD[4]为输入口,设置的函数为:
int at91_set_gpio_input(AT91PS_PIO pio_base, uint pin, int use_pullup, int use_filter) {
pio_base->PIO_IDR |= pin; if(use_pullup) { pio_base->PIO_PPUER |= pin; } else { pio_base->PIO_PPUDR |= pin; } pio_base->PIO_ODR |= pin; pio_base->PIO_PER |= pin; if(use_filter) { pio_base->PIO_IFER |= pin; } else { pio_base->PIO_IFDR |= pin; } return (0); }
然后读取PD[4]上的数值,函数为:
uchar at91_get_gpio_bit_value(AT91PS_PIO pio_base, uint pin) { if(( pio_base->PIO_PDSR & pin ) == pin ) return (1); else return (0); }
发现读到的都是0!
后来改用其他的口设置为输出,无论输出什么值读回来也是0,但是PIO_ODSR(输出数据状态寄存器)值是正常的,就是PIO_PDSR(引脚状态寄存器)读的就是0
我是哪里搞错了?各位有遇到过这种问题么? 头痛ing~~~~~
|