Hello,
I have trouble with the C28 Piccolo device using your uart driverlib V136 when setting optimization level higher than 1. It will stall at the while loop which I have marked red in the below code snippeds. I have also included the disassembly parts of this function with -O1 and -O2. The "loop optimizations" invoked by -O2 did a bit too much. Compiler bug?
I have tried it with compiler version C2000 6.1.4
I will test it with 6.1.5 as well, but I must restart windows prior doing this :-)
Best regards,
Stefan
File F2806X_MWare/driverlib/uart.c
void
UARTCharPut(unsigned long ulBase, unsigned char ucData)
{
//
// Check the arguments.
//
ASSERT(UARTBaseValid(ulBase));
//
// Wait until space is available.
//
while(!(HWREGB(ulBase + UART_O_CTL2) & UART_CTL2_TXRDY))
{
}
//
// Send the char.
//
HWREGB(ulBase + UART_O_TXBUF) = ucData;
}
Disassembly with optimization set to -O1
719 {
UARTCharPut:
3e8322: 1EA6 MOVL @XAR6, ACC
728 while(!(HWREGB(ulBase + UART_O_CTL2) & UART_CTL2_TXRDY))
C$DW$L$_UARTCharPut$2$B, C$L5:
3e8323: 06A6 MOVL ACC, @XAR6
3e8324: 0904 ADDB ACC, #4
3e8325: 83A9 MOVL XAR5, @ACC
3e8326: C6C5 MOVB AL.LSB, *+XAR5[0]
3e8327: 47A9 TBIT @AL, #0x7
3e8328: EFFB SBF C$L5, NTC
735 HWREGB(ulBase + UART_O_TXBUF) = ucData;
C$DW$L$_UARTCharPut$2$E:
3e8329: 06A6 MOVL ACC, @XAR6
3e832a: 0909 ADDB ACC, #9
3e832b: 83A9 MOVL XAR5, @ACC
3e832c: 92A4 MOV AL, @AR4
3e832d: 3CC5 MOVB *+XAR5[0], AL.LSB
736 }
3e832e: 0006 LRETR
764 return((HWREGB(ulBase + UART_O_CTL2) & UART_CTL2_TXEMPTY) ? false : true);
UARTBusy:
3e832f: 0904 ADDB ACC, #4
3e8330: 8AA9 MOVL XAR4, @ACC
3e8331: C6C4 MOVB AL.LSB, *+XAR4[0]
3e8332: FFA5 ASR AL, 6
3e8333: FF5E NOT AL
3e8334: 9001 ANDB AL, #0x1
765 }
3e8335: 0006 LRETR
Disassembly with optimization set to -O2
719 {
UARTCharPut:
3e85b6: 1EA6 MOVL @XAR6, ACC
3e85b7: 0904 ADDB ACC, #4
3e85b8: 83A9 MOVL XAR5, @ACC
3e85b9: C6C5 MOVB AL.LSB, *+XAR5[0]
728 while(!(HWREGB(ulBase + UART_O_CTL2) & UART_CTL2_TXRDY))
C$DW$L$_UARTCharPut$2$B, C$L31:
3e85ba: 47A9 TBIT @AL, #0x7
3e85bb: EFFF SBF C$L31, NTC
735 HWREGB(ulBase + UART_O_TXBUF) = ucData;
C$DW$L$_UARTCharPut$2$E:
3e85bc: 06A6 MOVL ACC, @XAR6
3e85bd: 0909 ADDB ACC, #9
3e85be: 83A9 MOVL XAR5, @ACC
3e85bf: 92A4 MOV AL, @AR4
3e85c0: 3CC5 MOVB *+XAR5[0], AL.LSB
736 }
3e85c1: 0006 LRETR