Other Parts Discussed in Thread: SYSCONFIG
Tool/software:
Team,
Posting on behalf of my customer.
Problem: At maximum processor voltage (3.3V), the following sequence causes incorrect data (two extra 1 bits are inserted in the ‘\n’) to be emitted from UART0 on my MSPM0L1306 processor. I’ve verified this by decoding the data with an oscilloscope.
Here is the code snippet, any ideas what could be causing this?
// set up ADC conversion memories….then…
DL_ADC12_enableConversions(ADC12_0_INST);
while(!DL_UART_isTXFIFOEmpty(UART_0_INST))
{
;
}
delay_cycles(1800); // 1+ character times at 115200 baud
DL_UART_Main_transmitData(UART_0_INST, ‘\n’);
NVIC_EnableIRQ(ADC12_0_INST_INT_IRQN);
gCheckADC = false;
DL_ADC12_startConversion(ADC12_0_INST);
while (gCheckADC == false) {
__WFE();
}
//… transmit more characters about the ADC results.
The ADC interrupt code:
void ADC12_0_INST_IRQHandler(void)
{
switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) {
case DL_ADC12_IIDX_MEM3_RESULT_LOADED:
gCheckADC = true;
break;
default:
break;
}
}
The UART0 interrupt code:
void UART_0_INST_IRQHandler(void)
{
unsigned char gEchoData;
switch (DL_UART_Main_getPendingInterrupt(UART_0_INST)) {
case DL_UART_MAIN_IIDX_RX:
gEchoData = DL_UART_Main_receiveData(UART_0_INST);
if (rxNewest++ >= UINT8_MAX)
{ rxNewest = 0;
}
if (rxNewest != rxOldest)
rxBuffer[rxNewest] = gEchoData;
else // overflow; drop the character
if (rxNewest-- ==0)
rxNewest = UINT8_MAX;
break;
default:
break;
}
}
Thanks,
Tom