信任不少人都有在不同CPU间移植程序的阅历,在移植过程中,对IO引脚的移植又占有了移植作业的大部分。那么,是否能在编码过程中选用一种较好的办法来削减将来移植中的作业量呢?
假定MSP430单片机的P40,P41,P42别离接在I2C的WP,SCK,SDL引脚上。一般,你可能会最早想到下面这种办法:
.H
#define I2C_WP 1
#define I2C_SCK 2
#define I2C_SDA 4
#define I2C_PDIR P4DIR
#define I2C_POUT P4OUT
#define I2C_PIN P4IN
.C
I2C_PDIR |= (I2C_WP | I2C_SCK | I2C_SDA);
I2C_POUT |= I2C_WP;
….
若WP是由P30经反相器接到WP脚上的,那么移植的作业量仍然是比较多,
#define IO_I2C_WP(m) m(3, 0, Y)
#define IO_I2C_SCK(m) m(4, 1, N)
#define IO_I2C_SDA (m) m(4, 2, N)
#define IO_SET(name) IO_##name(SET_)
#define IO_SET_(port, bit, inv) IO_SET_##inv(port, bit)
#define IO_SET_Y(port, bit) P##port##OUT &= ~(1<#define IO_SET_N(port, bit) P##port##OUT |= (1<#define IO_CLR(name) IO_##name(CLR_)
#define IO_CLR_(port, bit, inv) IO_CLR_##inv(port, bit)
#define IO_CLR_Y(port, bit) P##port##OUT |= (1<#define IO_CLR_N(port, bit) P##port##OUT &= ~(1<#define IO_DIR_O(name) IO_##name(DIR_O_)
#define IO_DIR_I(name) IO_##name(DIR_I_)
#define IO_DIR_O_(port, bit, inv) P##port##DIR |= (1<#define IO_DIR_I_(port, bit, inv) P##port##DIR &=~ (1<#define IO_TEST(name) IO_#name(TEST_)
#define IO_TEST_(port, bit, inv) IO_TEST_##inv(port, bit)
#define IO_TEST_Y(port, bit) ((P##port##IN & (1<#define IO_TEST_N(port, bit) ((P##port##IN & (1<#define IO_PORT(name) IO_##name(PORT_)
#define IO_PORT_(port, bit, inv) port
#define IO_BIT(name) IO_##name(BIT_)
#define IO_BIT_(port, bit, inv) (1<#define IO_P4_MASK(m)
(
m(I2C_SCK)
| m(I2C_SDA)
)
…..
如上所示,你能够依照上面的办法添加自己的功用。站长提示:其实不但MSP430单片机能够用这种办法,其它微处理器也能够这种办法。象8051单片机就能够这种办法来很好的完成。
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/259125.html