Перейти к содержанию
    

SPI Slave

может кто поделиться примером реализации SPI Slave.

Взял на попробовать stellaris launchpad. Как мастер запустил, а как Slave не выходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

со Slave разобрался.

разбираюсь теперь с прерываниями.

Вроде сделал все по аналогии с примерами.

Только надо прерывание по двум пинам, а получаю только одно.

Может кто подскажет?

 

    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);
}

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

со Slave разобрался.

разбираюсь теперь с прерываниями.

Вроде сделал все по аналогии с примерами.

Только надо прерывание по двум пинам, а получаю только одно.

Может кто подскажет?

Попробуйте по отдельности вызывать прерывания по каждому пину.

И кстати, в библиотеке есть ошибки (напр. в функции GPIOIntTypeGet, по крайней мере в rev 9453), так что аккуратнее).

Как определены KEY и KEY2? должны быть pin^2.

Изменено пользователем nowhow

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините? как сделать обработчик на каждое прерывание?

Вектор я могу повесить только один. :(

Пины объявляю вот так.

 

#define KEY GPIO_PIN_4 //USE_SW1

#define KEY2 GPIO_PIN_0 //USE_SW2

#define ALL_BUTTONS (KEY | KEY2)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините? как сделать обработчик на каждое прерывание?

Вектор я могу повесить только один. :(

не правильно выразился. Внутри прерывания разделите обработку по каждому пину, и смотрите в какой из обработчиков не заходит.

У меня вот так.

инициализация.



       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);

тело прерывания



    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);
...
}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо!!

попробую для инициализации использовать ROM_GPIOPinTypeGPIOInput.

Не думаю, что проблема в этом.

Просто проверьте значения регистров, которые отвечают за модуль gpio, при пошаговом исполнении программы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пришлось перебросить прерывание на другой пин. :(

Все заработало.

Не подскажите можно ли организовать двунаправленный SPI с одним проводом данных.

Единственное что приходит в голову подключить два SSI или делать SPI пешком.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не торопитесь на другой пин пересаживать). У вас же используется пин F.0, а он сидит на NMI, поэтому там нужно пляски с бубном устраивать - снимать защиту.

По SPI не подскажу, так как SPI в этом контроллере не задействовал.

Изменено пользователем nowhow

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо проверит CLK на периодичность. :(

Думаю задействовать таймер.

не подскажите как запускать таймер в ONE_SHOT каждый раз.

можно ли запуск таймера вывести на Pin.

нужно ли его каждый раз инициализировать или достаточно включить выключить.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...