目前可以控制2~9管腳(即 D0~D7)的輸出,以及1、14、16、17管腳的輸出,和10、11、12、13、15管腳的讀取。
請問如何將根據(jù)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); ???? ???? ???? }