KA_ru 0 19 января, 2013 Опубликовано 19 января, 2013 · Жалоба может кто поделиться примером реализации SPI Slave. Взял на попробовать stellaris launchpad. Как мастер запустил, а как Slave не выходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KA_ru 0 22 января, 2013 Опубликовано 22 января, 2013 (изменено) · Жалоба со 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); } Изменено 23 января, 2013 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nowhow 0 23 января, 2013 Опубликовано 23 января, 2013 (изменено) · Жалоба со Slave разобрался. разбираюсь теперь с прерываниями. Вроде сделал все по аналогии с примерами. Только надо прерывание по двум пинам, а получаю только одно. Может кто подскажет? Попробуйте по отдельности вызывать прерывания по каждому пину. И кстати, в библиотеке есть ошибки (напр. в функции GPIOIntTypeGet, по крайней мере в rev 9453), так что аккуратнее). Как определены KEY и KEY2? должны быть pin^2. Изменено 23 января, 2013 пользователем nowhow Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KA_ru 0 23 января, 2013 Опубликовано 23 января, 2013 · Жалоба Извините? как сделать обработчик на каждое прерывание? Вектор я могу повесить только один. :( Пины объявляю вот так. #define KEY GPIO_PIN_4 //USE_SW1 #define KEY2 GPIO_PIN_0 //USE_SW2 #define ALL_BUTTONS (KEY | KEY2) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nowhow 0 23 января, 2013 Опубликовано 23 января, 2013 · Жалоба Извините? как сделать обработчик на каждое прерывание? Вектор я могу повесить только один. :( не правильно выразился. Внутри прерывания разделите обработку по каждому пину, и смотрите в какой из обработчиков не заходит. У меня вот так. инициализация. 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); ... } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KA_ru 0 23 января, 2013 Опубликовано 23 января, 2013 · Жалоба спасибо!! попробую для инициализации использовать ROM_GPIOPinTypeGPIOInput. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nowhow 0 23 января, 2013 Опубликовано 23 января, 2013 · Жалоба спасибо!! попробую для инициализации использовать ROM_GPIOPinTypeGPIOInput. Не думаю, что проблема в этом. Просто проверьте значения регистров, которые отвечают за модуль gpio, при пошаговом исполнении программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KA_ru 0 23 января, 2013 Опубликовано 23 января, 2013 · Жалоба Пришлось перебросить прерывание на другой пин. :( Все заработало. Не подскажите можно ли организовать двунаправленный SPI с одним проводом данных. Единственное что приходит в голову подключить два SSI или делать SPI пешком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nowhow 0 24 января, 2013 Опубликовано 24 января, 2013 (изменено) · Жалоба Не торопитесь на другой пин пересаживать). У вас же используется пин F.0, а он сидит на NMI, поэтому там нужно пляски с бубном устраивать - снимать защиту. По SPI не подскажу, так как SPI в этом контроллере не задействовал. Изменено 24 января, 2013 пользователем nowhow Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KA_ru 0 29 января, 2013 Опубликовано 29 января, 2013 · Жалоба Надо проверит CLK на периодичность. :( Думаю задействовать таймер. не подскажите как запускать таймер в ONE_SHOT каждый раз. можно ли запуск таймера вывести на Pin. нужно ли его каждый раз инициализировать или достаточно включить выключить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться