这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » philip,arm,IO philip arm 的IO口使用有没有好的办法。

共2条 1/1 1 跳转至

philip,arm,IO philip arm 的IO口使用有没有好的办法。

院士
2006-09-17 18:14:16     打赏
philip,arm,IO philip arm 的IO口使用有没有好的办法。



关键词: philip     使用     有没有     好的     办法    

院士
2006-12-22 22:43:00     打赏
2楼
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口线,开始,每变一次,我就烦,现在采用这个办法后,随便变,哪变调整哪,要不了几分钟就搞定

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]