
Поставил IAR 6.70.1 и скачал LPCOpen 2.02. За основу взял пример для ADCHS. Попытался модифицировать ADCHS_IRQHandler добавив Chip_UART_SendRB(LPC_UARTX, &txring, (const uint32_t *) &sample, sizeof(sample)); сразу после обработки данных с FIFO от АЦП. Получилось что-то такое:
CODE
void ADCHS_IRQHandler(void)
{
uint32_t sts, data, sample, ch;
static bool on;
/* Toggle LED on each sample interrupt */
on = !on;
Board_LED_Set(0, on);
/* Get threshold interrupt status on group 1 and toggle on any crossing */
sts = Chip_HSADC_GetIntStatus(LPC_ADCHS, 1) & Chip_HSADC_GetEnabledInts(LPC_ADCHS, 1);
if (sts & (HSADC_INT1_THCMP_DCROSS(0) | HSADC_INT1_THCMP_DCROSS(1) |
HSADC_INT1_THCMP_UCROSS(2) | HSADC_INT1_THCMP_UCROSS(3) |
HSADC_INT1_THCMP_DCROSS(4) | HSADC_INT1_THCMP_UCROSS(5))) {
Board_LED_Set(1, true);
}
else {
Board_LED_Set(1, false);
}
/* Clear threshold interrupts statuses */
Chip_HSADC_ClearIntStatus(LPC_ADCHS, 1, sts);
/* Pull data from FIFO */
data = Chip_HSADC_GetFIFO(LPC_ADCHS);
while (!(data & HSADC_FIFO_EMPTY)) {
/* Pull sample data and channel from FIFO data */
sample = HSADC_FIFO_SAMPLE(data);
ch = HSADC_FIFO_CHAN_ID(data);
Chip_UART_SendRB(LPC_UARTX, &txring, (const uint32_t *) &sample, sizeof(sample));
lastSample[ch] = sample;
/* Next sample */
data = Chip_HSADC_GetFIFO(LPC_ADCHS);
}
/* Get ADC interrupt status on group 0 */
sts = Chip_HSADC_GetIntStatus(LPC_ADCHS, 0) & Chip_HSADC_GetEnabledInts(LPC_ADCHS, 0);
/* Set LED 2 (if it exists) on an error */
if (sts & (HSADC_INT0_FIFO_OVERFLOW | HSADC_INT0_DSCR_ERROR)) {
Board_LED_Set(2, true);
}
else {
Board_LED_Set(2, false);
}
/* Clear group 0 interrupt statuses */
Chip_HSADC_ClearIntStatus(LPC_ADCHS, 0, sts);
}
{
uint32_t sts, data, sample, ch;
static bool on;
/* Toggle LED on each sample interrupt */
on = !on;
Board_LED_Set(0, on);
/* Get threshold interrupt status on group 1 and toggle on any crossing */
sts = Chip_HSADC_GetIntStatus(LPC_ADCHS, 1) & Chip_HSADC_GetEnabledInts(LPC_ADCHS, 1);
if (sts & (HSADC_INT1_THCMP_DCROSS(0) | HSADC_INT1_THCMP_DCROSS(1) |
HSADC_INT1_THCMP_UCROSS(2) | HSADC_INT1_THCMP_UCROSS(3) |
HSADC_INT1_THCMP_DCROSS(4) | HSADC_INT1_THCMP_UCROSS(5))) {
Board_LED_Set(1, true);
}
else {
Board_LED_Set(1, false);
}
/* Clear threshold interrupts statuses */
Chip_HSADC_ClearIntStatus(LPC_ADCHS, 1, sts);
/* Pull data from FIFO */
data = Chip_HSADC_GetFIFO(LPC_ADCHS);
while (!(data & HSADC_FIFO_EMPTY)) {
/* Pull sample data and channel from FIFO data */
sample = HSADC_FIFO_SAMPLE(data);
ch = HSADC_FIFO_CHAN_ID(data);
Chip_UART_SendRB(LPC_UARTX, &txring, (const uint32_t *) &sample, sizeof(sample));
lastSample[ch] = sample;
/* Next sample */
data = Chip_HSADC_GetFIFO(LPC_ADCHS);
}
/* Get ADC interrupt status on group 0 */
sts = Chip_HSADC_GetIntStatus(LPC_ADCHS, 0) & Chip_HSADC_GetEnabledInts(LPC_ADCHS, 0);
/* Set LED 2 (if it exists) on an error */
if (sts & (HSADC_INT0_FIFO_OVERFLOW | HSADC_INT0_DSCR_ERROR)) {
Board_LED_Set(2, true);
}
else {
Board_LED_Set(2, false);
}
/* Clear group 0 interrupt statuses */
Chip_HSADC_ClearIntStatus(LPC_ADCHS, 0, sts);
}
Но по UART ничего не передается. Такое ощущение, что в переменной sample вообще ничего нет. Плавно меняю напряжение на всех входах АЦП во всём возможном диапазоне напряжений, но переменная sample не изменяется совсем. Сам UART полностью проинициализирован и работает отлично. Добавил в аттач мой переделанный hsadc.c из примеров LPCOpen 2.02.
Может быть кто-то уже работал с LPC4370 и знает в чем проблема.