We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi, I've got a strange problem using ADC boundary interrupts in conjunction with UART baud rate generator.
If I disable the baud rate generator, my ADC boundary interrupts occur perfectly when the AD0DAT0 go above or below the set boundary values.
If I enable the baud rate generator for UART, my ADC interrupt keeps occurring continuously, all the time irrespective of the boundary values. The same problem occurs when I use Timer1 for UART instead of the baud rate generator.
Has anyone faced this problem? Any suggestions will be appreciated.
Thanks and Regards, Vish P.
Device: LPC935/936. CPU Clock Freq: 1.8432 MHz. UART baud rate: 9600.
void ADC_Init(void) { ADMODB = 0x00; /******************************************************************************* * Set adc0 channel 0 pins to input only (disables digital output) * *******************************************************************************/ P1M1 |= 0x80; P1M2 &= ~0x80; /******************************************************************************* * Set adc0 channel 1 pins to input only (disables digital output) * *******************************************************************************/ P0M1 |= 0x01; P0M2 &= ~0x01; /******************************************************************************* * Disable dac0 * *******************************************************************************/ ADMODB &= ~0x04; /******************************************************************************* * Set boundaries * *******************************************************************************/ AD0BH = 0xC0; AD0BL = 0x40; /******************************************************************************* * Use boundary limits only for channel 0 * *******************************************************************************/ ADMODB &= ~0x01; /******************************************************************************* * Enable Boundry Interrupt, Enable ADC0. Mode: Immediate Start. * *******************************************************************************/ ADCON0 = (ENBI0 | ENADC0 | ADCS0); /******************************************************************************* * Set ISR Priority to 0 * *******************************************************************************/ IP1 &= 0x7F; IP1H &= 0x7F; /******************************************************************************* * Set Mode to Auto scan continuous conversion for AD0 * *******************************************************************************/ ADMODA = (BURST0); /******************************************************************************* * Select channels * *******************************************************************************/ ADINS = (ADC0_CHANNEL1|ADC0_CHANNEL0); /******************************************************************************* * Enable ADC Interrupt * *******************************************************************************/ EAD = 1; } void ADC_ISR(void) interrupt 14 using 3 { if (ADMODA & 0x08) { ADMODA &= ~0x08; } } void UART_Init(void) { /******************************************************************************* * Configure UART 9600 running at run at 1.8432MHz clock , clear SMOD0 * *******************************************************************************/ PCON &= ~0x40; SCON = 0x50; /******************************************************************************* * Set or Clear SMOD1 * *******************************************************************************/ PCON &= 0x7f; PCON |= (0 << 8); SSTAT = 0x00; /******************************************************************************* * Configure Baud Rate Generator * *******************************************************************************/ BRGCON = 0x00; BRGR0 = 0xB0; BRGR1 = 0x00; BRGCON = 0x03; /******************************************************************************* * TxD = Push-Pull, RxD = Quasi-Bidirectional and write high on the pins * *******************************************************************************/ P1M1 &= 0xFC; P1M2 |= 0x01; P1 |= 3; /******************************************************************************* * Initially not busy * *******************************************************************************/ mtxbusy = 0; /******************************************************************************* * Set ISR Priority to Level 0 * *******************************************************************************/ IP0 &= 0xEF; IP0H &= 0xEF; /******************************************************************************* * Enable UART Interrupt * *******************************************************************************/ ES = 1; }