free性丰满hd毛多多,久久综合给合久久狠狠狠97色69 ,欧美成人乱码一区二区三区,国产美女久久久亚洲综合,7777久久亚洲中文字幕

0
問(wèn)答首頁(yè) 最新問(wèn)題 熱門(mén)問(wèn)題 等待回答標(biāo)簽廣場(chǎng)
我要提問(wèn)

飛思卡爾的MC9S08QE128的SPI中斷問(wèn)題

我在使用QE128的SPI2模塊時(shí),用的是中斷方式收發(fā),在初始時(shí)將SPIxC1寄存器的SPTIE位(SPI Transmit Interrupt Enable)置1。但無(wú)數(shù)據(jù)傳輸時(shí),程序始終會(huì)由于SPIxS寄存器的SPTEF位(SPI Transmit Buffer Empty Flag)置位而觸發(fā)中斷。中斷里我每次都會(huì)讀取SPIxS寄存器來(lái)清除該標(biāo)志,但又會(huì)被程序自動(dòng)置位。請(qǐng)問(wèn)有用過(guò)SPI中斷的朋友指導(dǎo)下,謝謝!附上程序如下:
void SPI2_Init(void)
{??
? ? SPI2C1 = 0x00;
? ? SPI2C2 = 0x00;
? ?
? ? // SPIE=1; SPE=1; SPTIE=1; MSTR=1; CPOL=1; CPHA=1; SSOE=0; LSBFE=0
SPI2C1 = 0xFC;

// bit7=0; bit6=0; bit5=0; MODFEN=0; BIDIROE=1; bit2=0; SPISWAI=1; SPC0=0
SPI2C2 = 0x0A;
SPI2BR = 0x22;
}
void SPI2_Interrupt(void)
{
uint8 tmp;
uint8 tda;

tmp=SPI2S;
tda=SPI2D;

if(tmp & 0x80)? ?? ?? ???//SPRF=1, SPI Read Buffer Full Flag
{
? ? if(rbufc) {
? ?? ?SPI2_SerFlag |= CHAR_IN_RX;
? ?? ?rbufc--;
? ?? ?*rbuf++ = tda;
? ?? ?SPI2D = 0xFF;? ?? ? //Dummy Byte
? ?? ?if(rbufc == 0) {
? ?? ???CS_CLR;? ?? ?? ???//Chip Select high
? ?? ???SPI2_SerFlag &= ~CHAR_IN_RX;
? ?? ?}
? ? }
}
else if(tmp & 0x20)? ?? ?//SPTEF=1, SPI Transmit Buffer Empty Flag
{
? ? if(tbufc) {? ???//sending data
? ?? ?SPI2_SerFlag |= CHAR_IN_TX;
? ?? ?tbufc--;
? ?? ?SPI2D = tbuf[tbufc];? ?? ???
? ? }
? ? else {
? ?? ?if(tbuf[0] != 0xFF)? ?//Don't wait for reading data
? ?? ???CS_CLR;? ?? ?? ?? ? //Chip Select high
? ?? ?SPI2_SerFlag &= ~CHAR_IN_TX;
? ? }
}
}
提問(wèn)者:sdvywye 地點(diǎn):- 瀏覽次數(shù):1086 提問(wèn)時(shí)間:12-21 14:32
我有更好的答案
提 交
3條回答
lc123617 12-22 20:15
你在ISR中將標(biāo)志寄存器清零 這個(gè)沒(méi)錯(cuò).
但我記得好像一都都是寫(xiě)1清0吧.
你看你的這句話:SPI2_SerFlag &= ~CHAR_IN_TX;
我覺(jué)得應(yīng)該是SPI2_SerFlag |= CHAR_IN_TX;
手冊(cè)里應(yīng)該有寫(xiě)這么一句話:Write 1 to clean this bit.
hjh22678 12-29 23:57
SPI2_SerFlag是我定義的一個(gè)標(biāo)志寄存器,清中斷應(yīng)該是通過(guò)讀取SPI2S的方式,但我每次都讀取了SPI2S,系統(tǒng)還是會(huì)自動(dòng)將它置位,就算沒(méi)有數(shù)據(jù)發(fā)送了
mczxm 12-22 04:30
坐等高手前來(lái)解答
撰寫(xiě)答案
提 交
1 / 3
1 / 3