新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430 5438 單片機學習筆記

        MSP430 5438 單片機學習筆記

        作者: 時間:2016-11-25 來源:網絡 收藏
        通過430一年的學習遇到的很多問題,也收獲了很多,以下是學習中遇到的一些問題,和解決方法,還有很多沒有整理出來,慢慢整理中。。。。

        一、多源中斷問題
        #pragma vector = PORT2_VECTOR
        __interrupt void port2(void)
        {
        switch(P2IV)
        {
        case P2IV_P2IFG6:
        P2IFG &=~BIT6;
        P1OUT ^= BIT0;break; //LED1 亮滅
        case P2IV_P2IFG7:
        P2IFG &=~BIT7;
        P1OUT ^= BIT1;break; //LED2 亮滅
        default :break;
        }

        本文引用地址:http://www.104case.com/article/201611/321217.htm

        }


        #pragma vector = PORT2_VECTOR
        __interrupt void port2(void)
        {
        if(P1IFG&BIT6){
        P2IFG &=~BIT6;
        }
        if(P1IFG&BIT7){
        P2IFG &=~BIT7;
        }

        }

        這兩種方法有說明不同嗎?上面一種是通過向量中斷號進行判斷,下面是用中斷標志進行判斷,在上面的判斷中是否需要用軟件把中斷標志清0

        二、關于flash的塊擦除
        void Seg_Erase(void){
        _DINT();
        WDTCTL = WDTPW + WDTHOLD;
        char *flase_erase;
        flase_erase = (char *)0x8000; //指向要檫寫的段地址
        while(FCTL3&BUSY);
        FCTL3 = FWKEY; //清除LOCK
        FCTL1 = FWKEY +ERASE; //段檫除
        *flase_erase = 0; //空寫將0寫為1
        FCTL3 = FWKEY + LOCK; //LOCK置1
        _EINT();
        }
        請問在進行FLASH段擦除的時候,調用這個函數是只擦除一個字節?要進行整段擦除的時候是用for語句調這個函數128次。
        還是調用一次這個函數把128個字節一起擦除。

        三、_root問題
        當編譯器碰到該條指令的時候就把它進行編譯。

        四、關于MSP430的中斷嵌套,和優先級問題?

        五、msp430沒有自帶的EEPROM,但是information ABCD四個塊相當于EEPROM在5系列中他們的地址分別是
        A:001800H~00187fH
        B:001880H~0018FFH
        C: 001900H~00197FH
        D: 001980H~0019FFH

        六、硬件乘法器
        MPY = 125;
        OP2 = 125;
        result = RESHI;
        result = (result<<16)|RESLO;

        result=125*125;

        這兩個編譯的效率哪個更加高一點,result=125*125編譯器會不會直接把它編譯成
        MPY = 125;
        OP2 = 125;
        result = RESHI;
        result = (result<<16)|RESLO;
        使用硬件乘法器去算這個值。

        七、關于內存的問題
        我在用MSP5438片子求1024點FFT的時候,定義
        float dataR[1024]={0};
        float dataI[1024]={0};在RAN區

        定義正余弦表在flash程序存儲器里
        const float sin_tab[1024]={.....};
        const float cos_tab[1024]={.....};
        做軟仿的時候可以計算,用JTAG往片子里下的時候就不行,觀察RAM區時候發現,是定義的const float sin_tab[1024]
        const float cos_tab[1024]本應該在flash區的數據,怎么會出現在RAM區里?導致不能進行仿真。
        編譯以后這里看所消耗的資源應該是可以的承受的。
        892 bytes of CODE memory
        8194 bytes of CONST memory
        8194 bytes of DATA memory
        我是第一次用430的片子,有些問題不太明白,望各位大蝦不吝賜教。謝了。


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 安徽省| 磐石市| 比如县| 凤台县| 乌什县| 普宁市| 汉中市| 赣州市| 丰顺县| 紫金县| 沙湾县| 沁水县| 公主岭市| 成都市| 东莞市| 石门县| 肃南| 正定县| 新巴尔虎右旗| 乃东县| 凯里市| 筠连县| 连州市| 玉环县| 如东县| 疏勒县| 若羌县| 定南县| 克拉玛依市| 通榆县| 陇西县| 永胜县| 五台县| 安龙县| 原平市| 韶关市| 乌恰县| 阿尔山市| 富平县| 五寨县| 宜昌市|