共2条
1/1 1 跳转至页
philip,arm,IO philip arm 的IO口使用有没有好的办法。
问
IO的置高和置低,如P0.13要用IO0CLR =1<<13和IO0SET=1<<13。
如以后要更改别的口线或更改其他型号的ARM,还得在程序中一个个的改。有没有好的办法,像MCS51一样将P0.13定义在头部文件中,以后就在头部文件中更改一处就行了?
答 1: 特别是从P0口换到其他口如P1特别是从P0口换到其他口如P1时,就不能用IO0CLR 只能用IO1CLR、IO1SET命令了。 答 2: re.#define BEEP (1 << 7)
...
IO0SET = BEEP;
IO0CLR = BEEP;
答 3: 用#define定义,就像调用函数一下 答 4: 自己做个头文件,不就完事了。 答 5: re:zlgARM我使用的是LP22XX.还有P0,P1,P2等口。
如下次BEEP从P0.7换到了P1.8时,IO0SET,IO0CLR就不能用了,必须使用IO1SET,IO1CLR的命令。你定义的#define BEEP 1<<7/8就不通用了,也就是必须得在每个源程序中将IO0SET,IO0CLR更改为IO1SET,IO1CLR了,很麻烦。 答 6: 看我的,这是我控制up16针打的部分定义,很好修改的#define PRINT_HZ_BASE 0x81000000 //定义打印汉字字库的首地址
#define PRINT_FWDJ (1<<15) //复位电机
#define PRINT_TBDJ (1<<20) //同步电机
#define PRINT_QDDJ (1<<21)
#define PRINT_PIN3 (1<<22)
#define PRINT_PIN2 (1<<23)
#define PRINT_PIN1 (1<<24)
#define PRINT_PIN0 (1<<25)
#define Enable_Print_Pin0() IOCLR0=PRINT_PIN0
#define Disable_Print_Pin0() IOSET0=PRINT_PIN0
#define Enable_Print_Pin1() IOCLR0=PRINT_PIN1
#define Disable_Print_Pin1() IOSET0=PRINT_PIN1
#define Enable_Print_Pin2() IOCLR0=PRINT_PIN2
#define Disable_Print_Pin2() IOSET0=PRINT_PIN2
#define Enable_Print_Pin3() IOCLR0=PRINT_PIN3
#define Disable_Print_Pin3() IOSET0=PRINT_PIN3
#define Disable_Print_Pin_All() IOSET0=PRINT_PIN0+PRINT_PIN1+PRINT_PIN2+PRINT_PIN3
#define Enable_Print_Motor() IOCLR0=PRINT_QDDJ
#define Disable_Print_Motor() IOSET0=PRINT_QDDJ
如果口不变,连初始化文件都不用看,如果变换口了,改一下初始化文件
PrintSem = OSSemCreate(1); //Create print access semaphore
IODIR0 |= PRINT_PIN0;
IODIR0 |= PRINT_PIN1;
IODIR0 |= PRINT_PIN2;
IODIR0 |= PRINT_PIN3;
IODIR0 |= PRINT_QDDJ; //全部设置为输出口线
Disable_Print_Pin_All();
Disable_Print_Motor();
IOSET0 |= PRINT_FWDJ; //将口线初始化为1
IOSET0 |= PRINT_TBDJ; //将口线初始化为1 答 7: pubstar的办法,是唯一的好办法。 答 8: 不错。不过初始化文件使用的涉及到口的也可以一起作到头部定义文件中去,口线有变化时一起更改更好。
谢谢!!! 答 9: 向pubstar敬礼 答 10: 其实只要将修改的地方放集中入在一块,比如CFG.c,就行了利用函数将它们包装,这样就不会让那些寄存器设置和IO设置变分布于整个程序,如果变了一个口线,就得找半天,很难受,他们做硬件有时由于布板的需要,经常会变动IO口线,开始,每变一次,我就烦,现在采用这个办法后,随便变,哪变调整哪,要不了几分钟就搞定
如以后要更改别的口线或更改其他型号的ARM,还得在程序中一个个的改。有没有好的办法,像MCS51一样将P0.13定义在头部文件中,以后就在头部文件中更改一处就行了?
答 1: 特别是从P0口换到其他口如P1特别是从P0口换到其他口如P1时,就不能用IO0CLR 只能用IO1CLR、IO1SET命令了。 答 2: re.#define BEEP (1 << 7)
...
IO0SET = BEEP;
IO0CLR = BEEP;
答 3: 用#define定义,就像调用函数一下 答 4: 自己做个头文件,不就完事了。 答 5: re:zlgARM我使用的是LP22XX.还有P0,P1,P2等口。
如下次BEEP从P0.7换到了P1.8时,IO0SET,IO0CLR就不能用了,必须使用IO1SET,IO1CLR的命令。你定义的#define BEEP 1<<7/8就不通用了,也就是必须得在每个源程序中将IO0SET,IO0CLR更改为IO1SET,IO1CLR了,很麻烦。 答 6: 看我的,这是我控制up16针打的部分定义,很好修改的#define PRINT_HZ_BASE 0x81000000 //定义打印汉字字库的首地址
#define PRINT_FWDJ (1<<15) //复位电机
#define PRINT_TBDJ (1<<20) //同步电机
#define PRINT_QDDJ (1<<21)
#define PRINT_PIN3 (1<<22)
#define PRINT_PIN2 (1<<23)
#define PRINT_PIN1 (1<<24)
#define PRINT_PIN0 (1<<25)
#define Enable_Print_Pin0() IOCLR0=PRINT_PIN0
#define Disable_Print_Pin0() IOSET0=PRINT_PIN0
#define Enable_Print_Pin1() IOCLR0=PRINT_PIN1
#define Disable_Print_Pin1() IOSET0=PRINT_PIN1
#define Enable_Print_Pin2() IOCLR0=PRINT_PIN2
#define Disable_Print_Pin2() IOSET0=PRINT_PIN2
#define Enable_Print_Pin3() IOCLR0=PRINT_PIN3
#define Disable_Print_Pin3() IOSET0=PRINT_PIN3
#define Disable_Print_Pin_All() IOSET0=PRINT_PIN0+PRINT_PIN1+PRINT_PIN2+PRINT_PIN3
#define Enable_Print_Motor() IOCLR0=PRINT_QDDJ
#define Disable_Print_Motor() IOSET0=PRINT_QDDJ
如果口不变,连初始化文件都不用看,如果变换口了,改一下初始化文件
PrintSem = OSSemCreate(1); //Create print access semaphore
IODIR0 |= PRINT_PIN0;
IODIR0 |= PRINT_PIN1;
IODIR0 |= PRINT_PIN2;
IODIR0 |= PRINT_PIN3;
IODIR0 |= PRINT_QDDJ; //全部设置为输出口线
Disable_Print_Pin_All();
Disable_Print_Motor();
IOSET0 |= PRINT_FWDJ; //将口线初始化为1
IOSET0 |= PRINT_TBDJ; //将口线初始化为1 答 7: pubstar的办法,是唯一的好办法。 答 8: 不错。不过初始化文件使用的涉及到口的也可以一起作到头部定义文件中去,口线有变化时一起更改更好。
谢谢!!! 答 9: 向pubstar敬礼 答 10: 其实只要将修改的地方放集中入在一块,比如CFG.c,就行了利用函数将它们包装,这样就不会让那些寄存器设置和IO设置变分布于整个程序,如果变了一个口线,就得找半天,很难受,他们做硬件有时由于布板的需要,经常会变动IO口线,开始,每变一次,我就烦,现在采用这个办法后,随便变,哪变调整哪,要不了几分钟就搞定
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |