共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电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 |