新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430單片機IO引腳的宏定義

        MSP430單片機IO引腳的宏定義

        作者: 時間:2016-11-25 來源:網絡 收藏
        相信不少人都有在不同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單片機就可以這種方法來很好的實現。


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 北安市| 琼海市| 达州市| 本溪| 庆安县| 淮滨县| 五峰| 洛阳市| 井陉县| 新安县| 泾川县| 朝阳区| 运城市| 兴安县| 六枝特区| 田阳县| 息烽县| 乐业县| 永登县| 梓潼县| 望谟县| 崇阳县| 栖霞市| 永新县| 广汉市| 龙门县| 肃北| 延安市| 苍梧县| 浦东新区| 双城市| 凌云县| 河西区| 汉中市| 东阿县| 宝鸡市| 汉沽区| 柘城县| 玉环县| 剑川县| 英超|