SPI in MSP430F1611

Dec 02, 2009 3 Replies

Hello, All!



ëÔÏ ÈÏÒÏÛÏ ÚÎÁËÏÍ Ó SPI × MSP430F1xxx ?
ïÞÅÎØ ÎÅÐÏÎÑÔÎÙÊ ÇÌÀË, ÐÏËÁ ÎÅ ÎÁÛÅÌ × ÞÅÍ ÄÅÌÏ. ë SPI ÐÏÄËÌÀÞÅÎÏ Serial RAM.
éÎÉÃÉÁÌÉÚÉÒÕÀ ÅÇÏ ÔÁË: void SPIInit(void){ U0CTL = SWRST + SYNC + CHAR + MM; U0TCTL |= SSEL1 + SSEL0 + STC + CKPH /*+ CKPL*/;

U0BR1 = 0x00; U0BR0 = 0x02;



U0MCTL = 0x000; ME1 = USPIE0; U0CTL &= ~SWRST; }



äÁÌÅÅ ÉÎÉÃÉÁÌÉÚÁÃÉÑ Serial RAM:

void SRAMInit(void){ SPI_CS_ON; U0TXBUF = SRAMCMD_STWRITE; // Write STATUS CMD U0TXBUF = SRAMCMD_SEQNH; // Write STATUS = SEQUENCE WRITE, no HOLD use while(!(U0TCTL & TXEPT)); SPI_CS_OFF; }



á ÐÏÔÏÍ Õ ÍÅÎÑ ÅÓÔØ ÐÒÏÃÅÄÕÒÁ ÔÅÓÔÉÒÏ×ÁÎÉÑ ÐÁÍÑÔÉ: bool SRAMTest(void){ char dh,dl; int i; bool done; // read status: ÔÕÔ Ñ ÐÒÏ×ÅÒÑÀ, ÞÔÏ × ÓÔÁÔÕÓÅ ÔÏ ÞÔÏ Ñ ÔÕÄÁ ÚÁÐÉÓÁ×ÙÌ ÐÒ ÉÎÉÃÉÁÌÉÚÁÃÉÉ SPI_CS_ON; U0TXBUF = SRAMCMD_STREAD; // Read CND U0TXBUF = 0; // data request while(!(U0TCTL & TXEPT)); dh = U0RXBUF; // read Status w/o HOLD bit SPI_CS_OFF;

if (dh!=SRAMCMD_SEQNH) return false;



// ÄÁÌÅÅ × ÃÉËÌÅ ÐÉÛÕ ÁÄÒÅÓ × ÄÁÎÎÙÅ:



done = true; SPI_CS_ON; U0TXBUF = SRAMCMD_WRITE; // Write CMD = WRITE U0TXBUF = 0x00; // Addr-High while(!(IFG1 & UTXIFG0));



U0TXBUF = 0x00; // Addr-Low while(!(IFG1 & UTXIFG0));



for (i=0; i<(BUF_LENGTH/2);i++){ U0TXBUF = (byte)(i>>8); // Data-High while(!(IFG1 & UTXIFG0)); U0TXBUF = (byte)(i); // Data-Low while(!(U0TCTL & TXEPT)); } SPI_CS_OFF; // // ÔÅÐÅÒØ ÞÉÔÁÀ, ÎÁÄÅÑÓØ ÐÏÌÕÞÉÔØ ÔÏÖÅ ÓÁÍÏÅ :)



SPI_CS_ON; U0TXBUF = SRAMCMD_READ; // Read CMD U0TXBUF = 0x00; // Addr-High while(!(IFG1 & UTXIFG0)); U0TXBUF = 0x00; // Addr-Low while(!(IFG1 & UTXIFG0)); for (i=0; i<(BUF_LENGTH/2);i++){ U0TXBUF = 0; // data request while(!(U0TCTL & TXEPT)); dh = U0RXBUF; // read 1st U0TXBUF = 0; // data request while(!(U0TCTL & TXEPT)); dl = U0RXBUF; // read 2nd



if ( ((byte)(i>>8)!=dh) || ((byte)(i)!=dl) ) done = false; } SPI_CS_OFF;



return done; } //



÷Ï 1-È, Ñ ÎÅ ÐÏÎÉÍÁÀ, ÐÏÞÅÍÕ ÐÒÉ ÞÔÅÎÉÉ, ËÏÇÄÁ Ñ ÐÏÓÌÁÌ ÈÏÌÏÓÔÏÊ ÂÁÊÔ "ÔÕÄÁ", ÎÅ ÐÏÌÕÞÁÅÔÓÑ ÏÐÒÁÛÉ×ÁÔØ ÂÉÔ URXIFGO × IFG1 ? ðÒÉÈÏÄÉÔÓÑ ÏÖÉÄÁÔØ ÏÐÕÓÔÏÛÅÎÉÑ ÂÕÆÅÒÏ×, Ô.Å. ÏÐÒÁÛÉ×ÁÔØ TXEPT U0TCTL.
÷Ï 2-È - ÓÔÒÁÎÎÏÅ ÐÏ×ÅÄÅÎÉÅ, ×ÓÅ ×ÙÛÅÎÁÐÉÓÁÎÏÅ ÐÒÅËÒÁÓÎÏ ÒÁÂÏÔÁÌÏ ÎÁ ÍÁËÅÔÅ Ó ÐÒÏÃÏÍ 169, ÇÌÀËÉ ÐÏÌÅÚÌÉ ÎÁ ÎÏÒÍÁÌØÎÏÊ ÐÌÁÔÅ Ó ÐÒÏÃÏÍ 1611 (ÏÎÉ ×ÒÏÄÅ ËÁË ËÏÌÉÞÅÓÔ×ÏÍ ÐÁÍÑÔÉ ×ÓÅÈ ×ÉÄÏ×, ÂÏØÛÅ ÎÉÞÅÍ ÎÅ ÏÔÌÉÞÁÀÔÓÑ!). á Ó 1611 ×ÏÔ ÞÔÏ: Á) ÐÒÉ ÚÁÐÕÓËÅ × ÄÅÂÁÇÇÅÒÅ É ÏÔËÌÀÞÅÎÎÏÊ ÏÐÔÉÍÉÚÁÃÉ, ×ÓÅ ÒÁÂÏÔÁÅÔ. Â) ÐÒÉ ÚÁÐÕÓËÅ × ÄÅÂÁÇÇÅÒÅ É ×ËÌÀÞÅÎÎÏÊ ÏÐÔÉÍÉÚÁÃÉÉ, ÐÒÉ ÞÔÅÎÉÉ ÍÁÓÓÉ×Á (ÐÏÓÌÅÄÎÑÑ ÞÁÓÔØ Ð/Ð SRAMTest) ÞÉÔÁÀÔÓÑ ÎÕÌÉ, É ÓÌÅÄÏ×ÁÔÅÌØÎÏ ×ÙÌÁÚÉÔ ÏÛÉÂËÁ. ×) ÐÒÉ ÚÁÐÕÓËÅ ÂÅÚ ÄÅÂÁÇÇÅÒÁ (ÏÔËÌÀÞÁÀ ÄÖÅÊÔÁÇ) ÏÛÉÂËÁ ×ÙÌÁÚÉÔ ÐÏ ÌÀÂÏÍÕ, ÞÔÏ Ó ÞÔÏ ÂÅÚ ÏÐÔÉÍÉÚÁÃÉÉ. ô.Å. ÄÅÌÁÀ ËÁË × Ð. Á), ×ÓÅ ÒÁÂÏÔÁÅÔ, ÏÔËÌÀÞÁÀ ÄÖÅÊÔÁÇ, ÐÅÒÅÄÅÒÇÉ×ÁÀ ÐÉÔÁÎÉÅ - ÏÛÉÂËÁ.

HÁ ÍÁËÅÔËÅ ÓÏ 169-Í ÒÁÂÏÔÁÌÏ × ÌÀÂÏÍ ×ÉÄÅ, ÎÏ Ñ ×ÓÅ ÖÅ ÐÏÄÏÚÒÅ×ÁÀ ÎÅËÏÒÒÅËÔÎÕÀ ÒÁÂÏÔÕ Ó SPI, ÐÏÓËÏÌØËÕ ÉÌÉ Ñ ÎŠרÅÈÁÌ × ÅÇÏ ÄÁÔÁÛÉÔÏ×ÓËÏÅ ÏÐÉÓÁÎÉÅ, ÉÌÉ ÒÁÂÏÔÁ ÐÒÏÃÁ ÅÍÕ ÎÅ ÏÞÅÎØ ÓÏÏÔ×ÅÔÓ×ÕÅÔ. äÕÍÁÀ ×ÅÒÏÑÔÎÅÅ ÐÅÒ×ÏÅ, ÐÏÜÔÏÍÕ ÎÁÄÅÀÓØ ÎÁ ÐÏÍÏÝØ ÂÏÌÅÅ ÏÐÙÔÎÙÈ × ÒÁÂÏÔÅ Ó TI MSP430. ðÏÜÔÏÍÕ ÓÔÁÎÄÁÒÔÎÙÊ ×ÏÐÒÏÓ - "ÞÔÏ Ñ ÄÅÌÁÀ "ÎÅ ÔÁË" :)



With best regards, Alexander Torres.

formatting link
OR
formatting link



Wed Dec 02 2009 23:21, Alexander Torres wrote to All:

AT> Поэтому стандартный вопрос - "что я делаю "не так" :)

Для начала -- не надо писать говнокод, логику работы программы и взаимодействие с железом следует хотя бы разнести на разные функции, если не файлы или модули.

[ZX]

Hello, Kirill! You wrote to Alexander Torres on Sat, 5 Dec 2009 20:52:02 +0000 (UTC):

KF> Wed Dec 02 2009 23:21, Alexander Torres wrote to All:

AT>> ðÏÜÔÏÍÕ ÓÔÁÎÄÁÒÔÎÙÊ ×ÏÐÒÏÓ - "ÞÔÏ Ñ ÄÅÌÁÀ "ÎÅ ÔÁË" :)

KF> äÌÑ ÎÁÞÁÌÁ -- ÎÅ ÎÁÄÏ ÐÉÓÁÔØ ÇÏ×ÎÏËÏÄ, ÌÏÇÉËÕ ÒÁÂÏÔÙ ÐÒÏÇÒÁÍÍÙ É KF> ×ÚÁÉÍÏÄÅÊÓÔ×ÉÅ Ó ÖÅÌÅÚÏÍ ÓÌÅÄÕÅÔ ÈÏÔÑ ÂÙ ÒÁÚÎÅÓÔÉ ÎÁ ÒÁÚÎÙÅ ÆÕÎËÃÉÉ, KF> ÅÓÌÉ ÎÅ ÆÁÊÌÙ ÉÌÉ ÍÏÄÕÌÉ.

á ÜÔÏ É ÂÙÌ ËÕÓÏË, ÉÚ ÍÏÄÕÌÑ ×ÚÁÉÍÏÄÅÊÓÔ×ÉÑ Ó ÖÅÌÅÚÏÍ. ìÏÇËÁ ÒÁÂÏÔÙ ÐÒÏÇÒÍÍÙ ÓÏ×ÓÅÍ × ÄÒÕÇÉÈ ÆÁÊÌÁÈ.

ðÏ ÓÕÝÅÓÔ×Õ, Ñ ÔÁË ÐÏÎÉÍÀ, ÓËÁÚÔØ ÎÉÞÅÇÏ ?

With best regards, Alexander Torres. 2:461/28

formatting link
OR
formatting link

Hello, Alexander! You wrote to All on Wed, 2 Dec 2009 20:21:13 +0000 (UTC):

AT> Hello, All!

AT> ëÔÏ ÈÏÒÏÛÏ ÚÎÁËÏÍ Ó SPI × MSP430F1xxx ?

AT> ïÞÅÎØ ÎÅÐÏÎÑÔÎÙÊ ÇÌÀË, ÐÏËÁ ÎÅ ÎÁÛÅÌ × ÞÅÍ ÄÅÌÏ. AT> ë SPI ÐÏÄËÌÀÞÅÎÏ Serial RAM.

AT> éÎÉÃÉÁÌÉÚÉÒÕÀ ÅÇÏ ÔÁË: AT> void SPIInit(void){ AT> U0CTL = SWRST + SYNC + CHAR + MM; AT> U0TCTL |= SSEL1 + SSEL0 + STC + CKPH /*+ CKPL*/;

AT> U0BR1 = 0x00; U0BR0 = 0x02;

AT> U0MCTL = 0x000; AT> ME1 = USPIE0; AT> U0CTL &= ~SWRST; AT> }

AT> äÁÌÅÅ ÉÎÉÃÉÁÌÉÚÁÃÉÑ Serial RAM:

AT> void SRAMInit(void){ AT> SPI_CS_ON; AT> U0TXBUF = SRAMCMD_STWRITE; // Write STATUS AT> CMD AT> U0TXBUF = SRAMCMD_SEQNH; // Write AT> STATUS = AT> SEQUENCE WRITE, no HOLD use while(!(U0TCTL & TXEPT)); AT> SPI_CS_OFF; AT> }

AT> á ÐÏÔÏÍ Õ ÍÅÎÑ ÅÓÔØ ÐÒÏÃÅÄÕÒÁ ÔÅÓÔÉÒÏ×ÁÎÉÑ ÐÁÍÑÔÉ: AT> bool SRAMTest(void){ AT> char dh,dl; AT> int i; AT> bool done; AT> // read status: ÔÕÔ Ñ ÐÒÏ×ÅÒÑÀ, ÞÔÏ × ÓÔÁÔÕÓÅ ÔÏ ÞÔÏ Ñ ÔÕÄÁ AT> ÚÁÐÉÓÁ×ÙÌ ÐÒ ÉÎÉÃÉÁÌÉÚÁÃÉÉ AT> SPI_CS_ON; AT> U0TXBUF = SRAMCMD_STREAD; // Read CND AT> U0TXBUF = 0; // data request while(!(U0TCTL AT> & TXEPT)); AT> dh = U0RXBUF; // read Status w/o HOLD bit AT> SPI_CS_OFF;

AT> if (dh!=SRAMCMD_SEQNH) AT> return false;

AT> // ÄÁÌÅÅ × ÃÉËÌÅ ÐÉÛÕ ÁÄÒÅÓ × ÄÁÎÎÙÅ:

AT> done = true; AT> SPI_CS_ON; AT> U0TXBUF = SRAMCMD_WRITE; // Write CMD = WRITE AT> U0TXBUF = 0x00; // Addr-High while(!(IFG1 & AT> UTXIFG0));

AT> U0TXBUF = 0x00; // Addr-Low while(!(IFG1 & AT> UTXIFG0));

AT> for (i=0; i<(BUF_LENGTH/2);i++){ AT> U0TXBUF = (byte)(i>>8); // Data-High AT> while(!(IFG1 & UTXIFG0)); AT> U0TXBUF = (byte)(i); // Data-Low AT> while(!(U0TCTL & TXEPT)); AT> } AT> SPI_CS_OFF; AT> // AT> // ÔÅÐÅÒØ ÞÉÔÁÀ, ÎÁÄÅÑÓØ ÐÏÌÕÞÉÔØ ÔÏÖÅ ÓÁÍÏÅ :)

AT> SPI_CS_ON; AT> U0TXBUF = SRAMCMD_READ; // Read CMD AT> U0TXBUF = 0x00; // Addr-High while(!(IFG1 & AT> UTXIFG0)); AT> U0TXBUF = 0x00; // Addr-Low while(!(IFG1 & AT> UTXIFG0)); AT> for (i=0; i<(BUF_LENGTH/2);i++){ AT> U0TXBUF = 0; // data request AT> while(!(U0TCTL & TXEPT)); AT> dh = U0RXBUF; // read 1st AT> U0TXBUF = 0; // data request AT> while(!(U0TCTL & TXEPT)); AT> dl = U0RXBUF; // read 2nd

AT> if ( ((byte)(i>>8)!=dh) || ((byte)(i)!=dl) ) done = false; AT> } AT> SPI_CS_OFF;

AT> return done; AT> } AT> //

AT> ÷Ï 1-È, Ñ ÎÅ ÐÏÎÉÍÁÀ, ÐÏÞÅÍÕ ÐÒÉ ÞÔÅÎÉÉ, ËÏÇÄÁ Ñ ÐÏÓÌÁÌ ÈÏÌÏÓÔÏÊ AT> ÂÁÊÔ "ÔÕÄÁ", ÎÅ ÐÏÌÕÞÁÅÔÓÑ ÏÐÒÁÛÉ×ÁÔØ ÂÉÔ URXIFGO × IFG1 ? AT> ðÒÉÈÏÄÉÔÓÑ ÏÖÉÄÁÔØ ÏÐÕÓÔÏÛÅÎÉÑ ÂÕÆÅÒÏ×, Ô.Å. ÏÐÒÁÛÉ×ÁÔØ TXEPT AT> U0TCTL.

AT> ÷Ï 2-È - ÓÔÒÁÎÎÏÅ ÐÏ×ÅÄÅÎÉÅ, ×ÓÅ ×ÙÛÅÎÁÐÉÓÁÎÏÅ ÐÒÅËÒÁÓÎÏ ÒÁÂÏÔÁÌÏ ÎÁ AT> ÍÁËÅÔÅ Ó ÐÒÏÃÏÍ 169, ÇÌÀËÉ ÐÏÌÅÚÌÉ ÎÁ ÎÏÒÍÁÌØÎÏÊ ÐÌÁÔÅ Ó ÐÒÏÃÏÍ AT> 1611 (ÏÎÉ ×ÒÏÄÅ ËÁË ËÏÌÉÞÅÓÔ×ÏÍ ÐÁÍÑÔÉ ×ÓÅÈ ×ÉÄÏ×, ÂÏØÛÅ ÎÉÞÅÍ ÎÅ AT> ÏÔÌÉÞÁÀÔÓÑ!). AT> á Ó 1611 ×ÏÔ ÞÔÏ: AT> Á) ÐÒÉ ÚÁÐÕÓËÅ × ÄÅÂÁÇÇÅÒÅ É ÏÔËÌÀÞÅÎÎÏÊ ÏÐÔÉÍÉÚÁÃÉ, ×ÓÅ ÒÁÂÏÔÁÅÔ. AT> Â) ÐÒÉ ÚÁÐÕÓËÅ × ÄÅÂÁÇÇÅÒÅ É ×ËÌÀÞÅÎÎÏÊ ÏÐÔÉÍÉÚÁÃÉÉ, ÐÒÉ ÞÔÅÎÉÉ AT> ÍÁÓÓÉ×Á (ÐÏÓÌÅÄÎÑÑ ÞÁÓÔØ Ð/Ð SRAMTest) ÞÉÔÁÀÔÓÑ ÎÕÌÉ, É AT> ÓÌÅÄÏ×ÁÔÅÌØÎÏ ×ÙÌÁÚÉÔ ÏÛÉÂËÁ. AT> ×) ÐÒÉ ÚÁÐÕÓËÅ ÂÅÚ ÄÅÂÁÇÇÅÒÁ (ÏÔËÌÀÞÁÀ ÄÖÅÊÔÁÇ) ÏÛÉÂËÁ ×ÙÌÁÚÉÔ ÐÏ AT> ÌÀÂÏÍÕ, ÞÔÏ Ó ÞÔÏ ÂÅÚ ÏÐÔÉÍÉÚÁÃÉÉ. ô.Å. ÄÅÌÁÀ ËÁË × Ð. Á), ×ÓÅ AT> ÒÁÂÏÔÁÅÔ, ÏÔËÌÀÞÁÀ ÄÖÅÊÔÁÇ, ÐÅÒÅÄÅÒÇÉ×ÁÀ ÐÉÔÁÎÉÅ - ÏÛÉÂËÁ.

ôÕÔ ÎÅ ÓÏ×ÓÅÍ ÔÁË, ÂÅÚ ÄÖÅÊÔÁÇÁ ÏÎÏ Î ÓÁÍÏÍ ÄÅÌÅ ÒÁÂÏÔÁÅÔ. HÅ ÒÁÂÏÔÁÅÔ ÔÏÌËÏ ÐÒÉ ×ËÌÀÞÅÎÎÏÊ ÏÐÔÉÍÉÚÉÃÉÉ.

AT> HÁ ÍÁËÅÔËÅ ÓÏ 169-Í ÒÁÂÏÔÁÌÏ × ÌÀÂÏÍ ×ÉÄÅ, ÎÏ Ñ ×ÓÅ ÖÅ ÐÏÄÏÚÒÅ×ÁÀ AT> ÎÅËÏÒÒÅËÔÎÕÀ ÒÁÂÏÔÕ Ó SPI, ÐÏÓËÏÌØËÕ ÉÌÉ Ñ ÎŠרÅÈÁÌ × ÅÇÏ AT> ÄÁÔÁÛÉÔÏ×ÓËÏÅ ÏÐÉÓÁÎÉÅ, ÉÌÉ ÒÁÂÏÔÁ ÐÒÏÃÁ ÅÍÕ ÎÅ ÏÞÅÎØ ÓÏÏÔ×ÅÔÓ×ÕÅÔ. AT> äÕÍÁÀ ×ÅÒÏÑÔÎÅÅ ÐÅÒ×ÏÅ, ÐÏÜÔÏÍÕ ÎÁÄÅÀÓØ ÎÁ ÐÏÍÏÝØ ÂÏÌÅÅ ÏÐÙÔÎÙÈ × AT> ÒÁÂÏÔÅ Ó TI MSP430. AT> ðÏÜÔÏÍÕ ÓÔÁÎÄÁÒÔÎÙÊ ×ÏÐÒÏÓ - "ÞÔÏ Ñ ÄÅÌÁÀ "ÎÅ ÔÁË" :)

"þÔÏ Ñ ÄÅÌÀ ÎÅÔÁË" ÎÅÑÓÎÏ, ÎÏ ÂÅÇÌÙÊ ÐÒÏÓÍÔÒ ÉÔÅÒÎÅÔÁ ÐÏËÁÚÁÌ ÞÔÏ ÔÁËÉÅ ÇÌÀËÉ ÎÅ ÔÏÌØËÏ Õ ÍÅÎÑ, É ×ÉÎÏ×ÁÔ ÉÍÅÎÎÏ ÏÐÔÉÍÉÚÁÔÏÒ éáòÁ - ÏÎ ÚÁÂÙ×ÁÅÔ ÞÔÏ ÐÏÒÔ ×ÏÌÁÔÁÊÌ É ËÏÅ-ÇÄÅ ×ÙËÉÄÙ×ÁÅÔ ÐÏ×ÔÏÒÎÏÅ ÅÇÏ ÞÔÅÎÉÅ.

With best regards, Alexander Torres. 2:461/28

formatting link
OR
formatting link

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required