新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430非模擬IIC總線控制程序

        MSP430非模擬IIC總線控制程序

        作者: 時間:2016-12-02 來源:網絡 收藏

        #if __VER__ < 200
        interrupt [USART0TX_VECTOR] void ISR_I2C(void)
        #else
        #pragma vector=USART0TX_VECTOR
        __interrupt void ISR_I2C(void)
        #endif //上面的程序其實只要編寫 :

        //#pragma vector=USART0TX_VECTOR __interrupt void ISR_I2C(void)就行.
        {
        switch (I2CIV)
        {
        case I2CIV_AL:
        {
        //仲裁中斷
        break;
        }
        case I2CIV_NACK:
        {
        //NACK中斷
        break;
        }
        case I2CIV_OA:
        {
        //自己地址中斷
        break;
        }
        case I2CIV_ARDY:
        {
        //訪問準備好中斷
        break;
        }
        case I2CIV_RXRDY:
        {
        //接收準備好中斷
        I2CBuffer[0]=I2CDRB;
        break;
        }
        case I2CIV_TXRDY:
        {
        //發送準備好中斷
        I2CDRB = I2CBuffer[tx_count];
        tx_count = tx_count - 1;
        if (tx_count < 0)
        {
        //禁止發送中斷
        I2CIE &= ~TXRDYIE;
        }
        break;
        }
        case I2CIV_GC:
        {
        //一般調用中斷
        break;
        }
        case I2CIV_STT:
        {
        //起始條件中斷
        break;
        }
        }
        }
        void Init_IIC_Port(void)
        {
        //初始化端口寄存器 與IIC口無關的PX口關閉以便于對編寫系統板的綜合程序.
        //P1DIR = 0xFF;
        //P2DIR = 0xFF;
        P3DIR = 0xF5;
        //P4DIR = 0xFF;
        P5DIR = 0x7F;
        //P6DIR = 0xFF;
        //P4OUT = 0X11;
        //P5OUT &= 0XF0;
        P3SEL|=BIT1+BIT3; //在這里如果設置成

        }
        void Init_CLK(void)
        {
        unsigned int i;
        //將寄存器的內容清零
        //XT2震蕩器開啟
        //LFTX1工作在低頻模式
        //ACLK的分頻因子為1
        BCSCTL1 = 0X00;
        do
        {
        // 清除OSCFault標志
        IFG1 &= ~OFIFG;
        for (i = 0x20; i > 0; i--);
        }
        while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1

        //open XT2, LFTX2 選擇低頻率
        BCSCTL1 &= ~(XT2OFF + XTS); //BCSCTL1=0X00 功能一樣
        //DCO Rsel=7(Freq=3200k/25攝氏度)
        BCSCTL1 |= RSEL0 + RSEL1 + RSEL2;
        BCSCTL1 |= 0x07;
        //MCLK的時鐘源為TX2CLK,分頻因子為1
        BCSCTL2 += SELM1;
        //SMCLK的時鐘源為TX2CLK,分頻因子為1
        BCSCTL2 += SELS;
        }

        //對于系統時鐘的選擇關系到整個程序運行穩定性.

        看到很多賣開發板的人將IIC硬件寫上去后再去搞個模擬的IIC總線程序. 感覺到有點說不出的感覺. 其實430的IIC不是專用來外擴展FLASH的,而是用來和一些特殊的電路連接,實現功能. 對于MSP430147~149 15X 16X 的芯片內部有48~60K的Flash了還有必要來個模擬的IIC總線時序么.裝個UCOS都可以了.開發板要做的事情就是如何做好非模擬IIC程序的設計.更不是為了和C1搞比拼搶占市場.

        上面的程序是經過MSP430F1611的測試.程序的大部分來自上,曾想自己從新開發定義一個,但想到網絡上沒有這個程序的完整版.我就修改了其中的幾個地方.一方面便于自己查看并復習也適于網絡上的朋友來討論交流.

        上一頁 1 2 3 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 汤阴县| 永德县| 汉源县| 静乐县| 紫阳县| 临武县| 龙胜| 揭东县| 常熟市| 绥德县| 寿宁县| 武威市| 基隆市| 嘉兴市| 上蔡县| 巴彦淖尔市| 昭通市| 马尔康县| 昂仁县| 惠水县| 个旧市| 德江县| 舟山市| 五寨县| 贺兰县| 寻乌县| 平利县| 饶平县| 苏尼特左旗| 杨浦区| 铜川市| 淮南市| 资中县| 上饶市| 岳池县| 岐山县| 南木林县| 江源县| 交口县| 清水河县| 繁昌县|