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

 
 
 
Reply to this topicStart new topic
> Нужно проинициализировать I2C slave mode interrupt, в LPC29xx
toweroff
сообщение Jul 18 2011, 21:52
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Ткните носом, пожалуйста, если есть рабочий код
Пример взят из кодбандла филипса, настроил слейв адрес как у 24С32 - не дает ACK после отправки старта, адреса и R/W хостом
Адрес, который пишется в I2C0ADR есть 0xA2, то есть семейство 0x0A, адрес 001 и General Poll отключен
Прерывание не хочет срабатывать. Все, вроде, включено... такое ощущение, что либо адрес не совпадает, либо прерывание не включено...
Но либы один-в-один, что в кейле, что в иаре sm.gif

Вызывается с (IntNum==30), (Polarity==ACTIVE_HIGH), (Priority==0x0F)
Код
void EnableIntReq_FIQ( U32 IntNum, U32 Polarity, U32 Priority )
{
  U32 regVal;
  U32 *vect_addr;

  vect_addr = (U32 *)(VIC_BASE_ADDR + VECT_INT_REQ_INDEX + IntNum*4);
  regVal = *vect_addr;
  /* Enable WR, TARGET, and PRIORITY bits, enable INT request and set priority */
  /* if Priority > 16, it'll be wrapped to (priority % 0x0F). */
  regVal |= ((1<<26)|(1<<27)|(1<<28)|(1<<16)|(Priority&0xF));
  if ( Polarity == ACTIVE_HIGH )
  {
    regVal |= (1<<25);
    regVal &= ~(1<<17);
  }
  else
  {
    regVal |= (1<<25)|(1<<17);
  }
  /* target is FIQ */    
  regVal &= ~(1<<8);
  *vect_addr = regVal;
  return;
}


что там за грабли могут быть? PLL=240MHz
Код
    IVNSS_CLK_CONF     = CLK_SEL_PLL | AUTOBLK | DIV2;    /* BASE_IVNSS_CLK */


обработчик устанавливается на IRQ, код точно есть в проекте, все включено... wacko.gif

И кейловцы, паразиты, не дают либу TARMP9.DLL для просмотра периферии в ARM9 ядре angry.gif
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 19 2011, 00:48
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



И еще вопрос
Уж если кейловцы так не полюбили NXP, есть ли контроллеры другие с подобной адресацией периферии, или это мой утренний уже глюк... (дабы хоть посмотреть состояние регистров)


ЗЫ. Что ж такого филипс сделал Кейлу (отзовитесь, кто пользуется отладкой в ИАР для ядра сабжа, как там оно?), что не включили туда отладочную либу девятого ядра?

Keil 4.21

ЗЫЫЫЫ.... попробовато 3.5 что ли
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 25 2011, 13:54
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Замучился совсем я с этим I2C
Выбросил все эти примеровые штуки, все руками сделал:

Код
    /* Setup the IO to be I2C without internal pull up */
    SFSP1_10 = (1<<2)|(2<<0);
    SFSP1_11 = (1<<2)|(2<<0);

    /* Clear all flags */
    I2C0CONCLR = I2C_AA | I2C_SI | I2C_STA | I2C_I2EN;
    
    /* Setup bitrate */
    I2C0SCLH = BITRATE_CONF;
    I2C0SCLL = BITRATE_CONF;
    
    I2C0MMCTRL = MM_ENA | MATCH_ALL;

    /* Set the slave address */
    I2C0ADR = I2CSLAVE_ADDR;

    /* Install and enable the I2C0 interrupt handler */

  INT_REQUEST_30   = (1  << 28) |       /* Enable setting of priority level   */
                     (1  << 27) |       /* Enable setting interrupt target    */
                     (1  << 26) |       /* Write enable of new settings       */
                     (1  << 16) |       /* Enable interrupt request           */
                     (1  <<  8) |       /* Interrupt target is IRQ interrupt  */
                     (15 <<  0);       /* Priority level 15, disable nesting */

    /* Enable I2C*/
    I2C0CONSET = I2C_I2EN;


Смотрю отладчиком - адрес обработчика нормально сидит на своем месте 30-го вектора

Прерывание от таймера спокойно выполняется без всяких проблем

Цитата(toweroff @ Jul 19 2011, 01:52) *
И кейловцы, паразиты, не дают либу TARMP9.DLL для просмотра периферии в ARM9 ядре angry.gif


кстати, вот что грустного мне сказали в Keil
Цитата
we have been asking NXP to provide us System Viewer files for this purpose but the response has not been positive so far.

At ARM we had to stop manual coding of peripheral dialogs, since we are unable to cope with the masses of new devices we need to support.

We are using an XML based description format now, where silicon vendors provide the description file and uVision retargets its System Viewer accordingly to display the peripheral registers. This is working well with the Silicon Vendors for Cortex-M based MCUs already but not for ARM7 and ARM9 based MCUs.



The honest answer is probably not. I am sorry.



Regards,



Joachim Krech
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 25 2011, 19:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



как обычно - RTFM
биты AA надо выставлять, да и вообще (см.выше)
Go to the top of the page
 
+Quote Post

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

 


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


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