Bonjour,
J'utilise un MSP430F5528 dont le code est compilé sous IAR et j'ai un souci avec le CS.
Je configure le module UCB1 en mode 3bits avec un CS commandé en dehors du module.
Le problème est que quand j'échange une trame d'un octet alors le CS se relève avant que la clock ait finie de transmettre alors que quand il y a plus d'un octet alors le CS fonctionne bien.
Voici la configuration du SPI :
Ma fonctionne d'écriture ://Config IO et registres
/*****************************/
P6DIR |= BIT6 + BIT7; // /WP et /HOLD
P6SEL &= (~BIT6) & (~BIT7) ;
CBCTL3 &= (~CBPD6) & (~CBPD7);
P6OUT |= BIT6 + BIT7;
P4DIR |= BIT0; // /CS
P4SEL &= ~BIT0;
P4SEL |= BIT1 + BIT2 + BIT3; // SO, SI, CLK
UCB1CTL1 |= UCSWRST;
UCB1CTL0 |= /*UCMODE0 + */ UCMSB + UCMST + UCSYNC;
UCB1CTL1 |= UCSSEL1 + UCSSEL0;
UCB1BR0 = 0x00; // 23,04MHz / 0x00E6 = 100kHz, .../0x0017 = 1MHz
UCB1BR1 = 0x06; // 23,04MHz / 0x0600 = 15kHz
UCB1IE |= UCTXIE;
UCB1CTL1 &= ~UCSWRST;
SPI_CS(1);En fichier joint les relevés des signaux CLK et CS.void SPI_Write(const u8* data, unsigned int length)
{
u16 i;
SPI_CS(0);
for (i=0; i<length; i++)
{
while ((UCB1IFG & UCTXIFG) != UCTXIFG);
UCB1TXBUF = data[i];
}
while ((UCB1IFG & UCTXIFG) != UCTXIFG);
SPI_CS(1);
}
Une petite idée d'où je fais mal les choses ?
Merci par avance.
-----