新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 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://m.butianyuan.cn/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段擦除的時候,調用這個函數(shù)是只擦除一個字節(jié)?要進行整段擦除的時候是用for語句調這個函數(shù)128次。
還是調用一次這個函數(shù)把128個字節(jié)一起擦除。

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

四、關于MSP430的中斷嵌套,和優(yōu)先級問題?

五、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區(qū)

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


上一頁 1 2 下一頁

評論


技術專區(qū)

關閉