Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SPI Slave
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
KA_ru
может кто поделиться примером реализации SPI Slave.
Взял на попробовать stellaris launchpad. Как мастер запустил, а как Slave не выходит.
KA_ru
со Slave разобрался.
разбираюсь теперь с прерываниями.
Вроде сделал все по аналогии с примерами.
Только надо прерывание по двум пинам, а получаю только одно.
Может кто подскажет?

CODE
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOInput(GPIO_PORTF_BASE,ALL_BUTTONS);
GPIOPadConfigSet(GPIO_PORTF_BASE,ALL_BUTTONS,
GPIO_STRENGTH_2MA,GPIO_PIN_TYPE_STD_WPU);
GPIOIntTypeSet(GPIO_PORTF_BASE,KEY,GPIO_RISING_EDGE);
GPIOIntTypeSet(GPIO_PORTF_BASE,KEY2,GPIO_FALLING_EDGE);

GPIOPinIntEnable(GPIO_PORTF_BASE,ALL_BUTTONS);
IntEnable(INT_GPIOF);

///ISR*****************************

void directionISR(void)
{
state_dir = 1;
key_value = GPIOPinIntStatus(GPIO_PORTF_BASE,true);
GPIOPinIntClear(GPIO_PORTF_BASE,ALL_BUTTONS); //key_value);
UARTprintf("%X,", key_value);
}
nowhow
Цитата(KA_ru @ Jan 23 2013, 01:15) *
со Slave разобрался.
разбираюсь теперь с прерываниями.
Вроде сделал все по аналогии с примерами.
Только надо прерывание по двум пинам, а получаю только одно.
Может кто подскажет?

Попробуйте по отдельности вызывать прерывания по каждому пину.
И кстати, в библиотеке есть ошибки (напр. в функции GPIOIntTypeGet, по крайней мере в rev 9453), так что аккуратнее).
Как определены KEY и KEY2? должны быть pin^2.
KA_ru
Извините? как сделать обработчик на каждое прерывание?
Вектор я могу повесить только один. sad.gif
Пины объявляю вот так.

#define KEY GPIO_PIN_4 //USE_SW1
#define KEY2 GPIO_PIN_0 //USE_SW2
#define ALL_BUTTONS (KEY | KEY2)
nowhow
Цитата(KA_ru @ Jan 23 2013, 11:44) *
Извините? как сделать обработчик на каждое прерывание?
Вектор я могу повесить только один. sad.gif

не правильно выразился. Внутри прерывания разделите обработку по каждому пину, и смотрите в какой из обработчиков не заходит.
У меня вот так.
инициализация.
Код
[/code]
       SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
    
    ROM_GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4);
    ROM_GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_5);
    
    GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
    GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_5, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
    
    GPIOPinIntEnable(GPIO_PORTC_BASE, GPIO_PIN_4);
    GPIOIntTypeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_BOTH_EDGES);
    GPIOPinIntEnable(GPIO_PORTC_BASE, GPIO_PIN_5);
    GPIOIntTypeSet(GPIO_PORTC_BASE, GPIO_PIN_5, GPIO_BOTH_EDGES);    
    IntEnable(INT_GPIOC);
[code]

тело прерывания
Код
[/code]
    if (GPIOPinIntStatus(GPIO_PORTC_BASE, true) & GPIO_PIN_4)
{
        GPIOPinIntClear(GPIO_PORTC_BASE, GPIO_PIN_4);
...
}
    
    if (GPIOPinIntStatus(GPIO_PORTC_BASE, true) & GPIO_PIN_5)
{
        GPIOPinIntClear(GPIO_PORTC_BASE, GPIO_PIN_5);
...
}[code]


KA_ru
спасибо!!
попробую для инициализации использовать ROM_GPIOPinTypeGPIOInput.
nowhow
Цитата(KA_ru @ Jan 23 2013, 12:42) *
спасибо!!
попробую для инициализации использовать ROM_GPIOPinTypeGPIOInput.

Не думаю, что проблема в этом.
Просто проверьте значения регистров, которые отвечают за модуль gpio, при пошаговом исполнении программы.
KA_ru
Пришлось перебросить прерывание на другой пин. sad.gif
Все заработало.
Не подскажите можно ли организовать двунаправленный SPI с одним проводом данных.
Единственное что приходит в голову подключить два SSI или делать SPI пешком.
nowhow
Не торопитесь на другой пин пересаживать). У вас же используется пин F.0, а он сидит на NMI, поэтому там нужно пляски с бубном устраивать - снимать защиту.
По SPI не подскажу, так как SPI в этом контроллере не задействовал.
KA_ru
Надо проверит CLK на периодичность. sad.gif
Думаю задействовать таймер.
не подскажите как запускать таймер в ONE_SHOT каждый раз.
можно ли запуск таймера вывести на Pin.
нужно ли его каждый раз инициализировать или достаточно включить выключить.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.