目前可以控制2~9管脚(即 D0~D7)的输出,以及1、14、16、17管脚的输出,和10、11、12、13、15管脚的读取。
请问如何将根据CH384的手册2~9管脚是可以作为输入模式的,请问需要如何配置呢?
下面代码是(控制2~9管脚(即 D0~D7)的输出,以及1、14、16、17管脚的输出,和10、11、12、13、15管脚的读取。)
#include #include #include #include #include #include #include #include #if __LP64__ #define strtoptr strtoull #else #define strtoptr strtoul #endif //#define PAGE_SIZE 16384 int main(int argc, char *argv[]) { size_t PAGE_SIZE; int width = 1; void *virt_addr; off_t target, target_base; unsigned long read_result, writeval; int type_width; uint32_t value = 0,param=0,temp=0; PAGE_SIZE = getpagesize(); uintptr_t addr = strtoptr("0x0efdfc007400", 0, 16); //strtoptr(argv[1], 0, 16); //strtoptr("0x0efdfc007400", 0, 16); uintptr_t endaddr = 0; if (!endaddr) endaddr = addr + width - 1; //fprintf(stderr,"argv[1] %s addr %08x PAGE_SIZE %08x\n", argv[1],addr,PAGE_SIZE); int fd = open("/dev/mem", O_RDWR | O_SYNC); if(fd < 0) { fprintf(stderr,"cannot open /dev/mem\n"); return -1; } off_t mmap_start = addr & ~(PAGE_SIZE - 1); size_t mmap_size = endaddr - mmap_start + 1; mmap_size = (mmap_size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1); void* page = mmap64(0, mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, mmap_start); if(page == MAP_FAILED) { fprintf(stderr,"cannot mmap region\n"); return -1; } volatile uint8_t* PDR_reg= (volatile uint8_t*) (((uintptr_t) page) + (addr & (PAGE_SIZE -1 ))); volatile uint8_t* PSR_reg = (volatile uint8_t*) (((uintptr_t) page) +( (addr+0x01) & (PAGE_SIZE -1 ))); volatile uint8_t* PCR_reg = (volatile uint8_t*) (((uintptr_t) page) +( (addr+0x02) & (PAGE_SIZE -1 ))); volatile uint8_t* PXR_reg = (volatile uint8_t*) (((uintptr_t) page) +( (addr+0x03) & (PAGE_SIZE -1 ))); PDR_reg=0XFF;//2~9管脚输出高电平 PCR_reg=0x04;//1、14、16、17管脚的输出高电平 fprintf(stderr," 10、11、12、13、15管脚的读取 PSR %02x \n", (*PSR_reg)&0xF8); }