|
spi_slave в Nios |
|
|
|
 |
Ответов
|
Dec 4 2013, 16:24
|

Лентяй
     
Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843

|
Цитата(_Anatoliy @ Dec 4 2013, 17:34)  Подскажите,плз,как его нужно делать?Если с мастером более-менее понятно,то со слейвом у меня основная проблема - прерывания.Хочу написать свой обработчик,нужно чтобы по каждому принятому байту происходило прерывание основной программы.Как подключить обработчик?Нужен ли для этого VIC или можно обойтись без него?Литературу,конечно,читаю но как-то тяжело идёт процесс...С Nios раньше практически не работал.Может есть у кого похожий пример? Можно и без VIC, если не нужно быстрого отклика на прерывание. Используйте Internal контроллер (т.е. софтовый). Обработчик подключается специальной сишной функцией. Вот пример ниосовского кода с использованием пркрываний: Код #include "sys/alt_irq.h" #include "system.h"
#include "altera_avalon_pio_regs.h" #include "altera_avalon_timer_regs.h"
#include "pwm_avalon_interface_regs.h" #include "pwm_avalon_interface.h" #include "pwm_avalon_interface.c"
//********************** Global Variables *********************************************** volatile unsigned short int led_dir; volatile int return_code; volatile unsigned char i = 0; volatile unsigned int duty_cycle[8] = {499999, 150000, 60000, 10000, 5000, 2500, 800, 1};
//********************** ISR functions ************************************************** static void timer_isr (void * context) { volatile unsigned char* led_ptr; volatile unsigned char* dir_ptr;
IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0);
dir_ptr = (volatile unsigned char*)context; led_ptr = dir_ptr + 1;
return_code = altera_avalon_pwm_change_duty_cycle(LED_PWM_BASE, duty_cycle[i]); IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, *led_ptr);
if(*dir_ptr) { *led_ptr >>= 1; i--; } else { *led_ptr <<= 1; i++; } if(*led_ptr & 0x81) *dir_ptr ^= 0x1;
}
//********************** Auxiliary functions ******************************************** void check_return_code(unsigned int address, int return_code) { if(return_code != ALTERA_AVALON_PWM_OK) ; // print_error(address, return_code); }
//********************* Main function *************************************************** int main (void) { void* led_dir_ptr = (void*)&led_dir;
led_dir = 0x0100;
//Timer Initialization IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_BASE, 0x0003); IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_BASE, 0);
IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_BASE, 0x9f00); IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_BASE, 0x0055);//0x0014);
//Register ISR for timer event alt_ic_isr_register(TIMER_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_IRQ, timer_isr, led_dir_ptr, 0);
//Initialize PWM and Check Return Code return_code = altera_avalon_pwm_init(LED_PWM_BASE, 500000, 1); check_return_code(LED_PWM_BASE, return_code);
//Enable PWM and Check Return Code return_code = altera_avalon_pwm_enable(LED_PWM_BASE); check_return_code(LED_PWM_BASE, return_code);
//Start timer and begin the work IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_BASE, 0x0007);
// IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led);
while (1) check_return_code(LED_PWM_BASE, return_code);
}
--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
|
|
|
|
|
Dec 5 2013, 07:11
|

Утомлённый солнцем
     
Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832

|
Цитата(Stewart Little @ Dec 4 2013, 18:24)  Большое спасибо,буду пробовать. По ходу вопрос:какой смысл несёт передаваемый параметр context?Кто его формирует? Код static void timer_isr (void * context) А нет ли у Вас такого же примера для VIC?Или там всё аналогично,только функции другие?
|
|
|
|
Сообщений в этой теме
_Anatoliy spi_slave в Nios Dec 4 2013, 13:34  alexPec Цитата(_Anatoliy @ Dec 5 2013, 11:11) По ... Dec 5 2013, 08:31   _Anatoliy Цитата(alexPec @ Dec 5 2013, 10:31) Сами ... Dec 5 2013, 08:58    _Anatoliy Что-то никак не получается подружиться с эклипсом.... Dec 5 2013, 13:44 Копейкин М.б. компилятор не видит декларации прототипа функ... Dec 5 2013, 15:01 _Anatoliy Цитата(Копейкин @ Dec 5 2013, 17:01) М.б.... Dec 5 2013, 15:58  gosu-art Цитата(_Anatoliy @ Dec 5 2013, 18:58) А к... Dec 6 2013, 05:22   _Anatoliy Цитата(gosu-art @ Dec 6 2013, 07:22)... Dec 6 2013, 08:30    Konst_777 Цитата(_Anatoliy @ Dec 6 2013, 11:30) Есл... Dec 6 2013, 09:07     _Anatoliy Коллеги,подскажите синтаксис вызова в WinXP Nios I... Dec 9 2013, 15:52 Konst_777 Цитата(_Anatoliy @ Dec 4 2013, 17:34) ...... Dec 5 2013, 15:05 Копейкин В *.h обычно ставят "предохранители" от ... Dec 6 2013, 08:59 _Anatoliy Цитата(Копейкин @ Dec 6 2013, 10:59)
На ... Dec 6 2013, 09:05 Kuzmi4 2 _Anatoliy
пробелы ему не нравятся я так понял, о... Dec 9 2013, 17:23 _Anatoliy Цитата(Kuzmi4 @ Dec 9 2013, 19:23) 2 _Ana... Dec 10 2013, 08:05 Kuzmi4 Прицепил батник и скрипт
У меня он рабоатет без п... Dec 10 2013, 08:21 _Anatoliy Цитата(Kuzmi4 @ Dec 10 2013, 10:21) Прице... Dec 10 2013, 08:37 Kuzmi4 2 _Anatoliy
теперь ясно - путей нет к sof2flash/el... Dec 10 2013, 08:53 _Anatoliy Цитата(Kuzmi4 @ Dec 10 2013, 10:53) 2 _An... Dec 10 2013, 09:11 Kuzmi4 2 _Anatoliy
попробуйте везьде явно все пути указат... Dec 10 2013, 09:14 _Anatoliy Цитата(Kuzmi4 @ Dec 10 2013, 11:14) 2 _An... Dec 10 2013, 09:27  _Anatoliy Всё получилось,благодарю за внимание. Dec 10 2013, 11:58   gosu-art Цитата(_Anatoliy @ Dec 10 2013, 14:58) Вс... Dec 10 2013, 12:50    _Anatoliy Цитата(gosu-art @ Dec 10 2013, 14:50... Dec 10 2013, 13:17     _Anatoliy А как понять вот этот перл от эклипса?Файл alt_typ... Jan 31 2014, 09:09      Stewart Little Цитата(_Anatoliy @ Jan 31 2014, 13:09) А ... Jan 31 2014, 09:59       _Anatoliy Цитата(Stewart Little @ Jan 31 2014, 11:5... Jan 31 2014, 10:11        gridinp Цитата(_Anatoliy @ Jan 31 2014, 14:11) Ku... Jan 31 2014, 10:46 Kuzmi4 2 _Anatoliy
у меня такая же ситуация случается на ... Jan 31 2014, 09:21 _Anatoliy Цитата(Kuzmi4 @ Jan 31 2014, 11:21) 2 _An... Jan 31 2014, 09:26 Kuzmi4 2 _Anatoliy
нет, заново в IDE компоную проект с ну... Jan 31 2014, 09:36
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|