реклама на сайте
подробности

 
 
> Ошибки в примерах инициализации АЦП LPC1114
AndyDev
сообщение Jan 17 2012, 00:44
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 17-11-07
Пользователь №: 32 406



Поработал немножко в Keil'е с LPC1114, и вот что почерпнул интересного из багов инициализации АЦП в стандартных примерах от NXP:

Файл 'adc.c':

Рудименты от LPC2xxx в инициализации АЦП:
Код
  LPC_ADC->CR = ( 0x01 << 0 ) |  /* SEL=1,select channel 0~7 on ADC0 */
    ( ( SystemAHBFrequency / ADC_Clk - 1 ) << 8 ) |  /* CLKDIV = Fpclk / 1000000 - 1 */
    ( 0 << 16 ) |         /* BURST = 0, no BURST, software controlled */
    ( 0 << 17 ) |          /* CLKS = 0, 11 clocks/10 bits */
    ( 1 << 21 ) |          /* PDN = 1, normal operation */
    ( 0 << 22 ) |          /* TEST1:0 = 00 */
    ( 0 << 24 ) |          /* START = 0 A/D conversion stops */
    ( 0 << 27 );        /* EDGE = 0 (CAP/MAT singal falling,trigger A/D conversion) */

Как видно, в слове инициализации присутствует мифический бит PDN (Power Down), который существует в семействе LPC2xxx, но в семействе LPC1xxx перенесен из слова инициализации АЦП, в регистр управления PDRUNCFG. Т.е. в данном примере, в 1 устанавливается несуществующий бит, который трогать не надо.

Ошибка, связанная с неотключением подтягивающего резистора на Vdd:
Код
  LPC_IOCON->PIO1_4    &= ~0x8F; /* Clear bit7, change to analog mode. */    
  LPC_IOCON->PIO1_4    |= 0x01;  /* ADC IN5 */

Вот так в примере предлагается переключать порт микроконтроллера из цифрового состояния (по умолчанию при сбросе), в аналоговое. Как видно, первой командой включается ADMODE порта, очищается поле FUNC, а так же очищается только один младший бит поля MODE. Что отключит нам pull-down резистор, переключит режим repeater-mode в pull-up(!), и не тронет режим pull-up, если он был установлен. Второй командой в поле FUNC устанавливается режим ADC. Таким образом, если у вас был режим pull-up, или же repeater-mode, то он так и останется при переключении в режим АЦП! Проверял на практике, подтягивающий резистор к Vdd остается включенным. А ввиду того, pull-up режим - это режим, в который переходит порт при сбросе, можете быть уверены, что пользуясь стандартным примером от NXP, вы будете измерять сигнал с подтягивающем резистором. Проблема решается просто:

Код
    LPC_IOCON->PIO1_4 = 0x01;

Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 08:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01345 секунд с 7
ELECTRONIX ©2004-2016