Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: BF533
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
astronarh
Здравствуйте уважаемые!!!
Вот пришлось программировать на BF533. Много проблем, много вопросов.
Не подскажите ли как на BF запустить SPI, но не в режиме DMA. Может это вообще не возможно.
Подскажите что сможете.
fontp
/Visual_DSP 4.5/Blackfin/docs/drivers/spi/adi_spi_int.pdf

Оно?
K A A
А в чем проблема-то?
Вот, например, инициализация для работы в режиме slave:

Код
void Init_SPI(void)
{
    #define SPI_SCLK_FREQ 1e6 // Частота SCLK при работе интерфейса в режиме master
    *pSPI_BAUD = (unsigned short)(SCLK/(2*SPI_SCLK_FREQ));
    *pSPI_FLG = UPD_REG;
    *pSPI_CTL = 0
        | RDBR_CORE    // передачи начинаются при чтении SPI_RDBR, прерывание
                                             // генерируется  при заполнении SPI_RDBR
//        | SZ        // когда SPI_TDBR пуст, то передача нуля      
//        | GM        // когда SPI_RDBR заполнен, предыдущие данные перетираются
        | PSSE      // режим выбора ведомого разрешен
        | EMISO     // выход MISO разрешен
//        | SIZE      // длина слова 16 бит
//        | LSBF      // LSB first
        | CPHA      // SCK меняет состояние в начале первого бита данных
//        | CPOL      // активный уровень SCK низкий
//        | MSTR      // режим ведущего
//        | WOM       // выход с открытым стоком
        | SPE    // SPI-порт разрешен
                 ;
    *pSPI_TDBR = SPI_WAITCMD_CODE; // запись в регистр передачи чего-то там
    #undef SPI_SCLK_FREQ
}


Обрати внимание на конструкцию со многими "|" - это для наглядности (установка битов). Там где строка закомментирована, соответствующий бит сброшен. Определения в cdefBF53x.h

Вот инициализация прерываний (сдесь, кроме прерывания от SPI, инициализируются и другие):

Код
void Init_Interrupts(void)
{

    // assign ISRs to interrupt vectors
    // используем назначение прерываний по умолчанию
    register_handler(ik_ivg9, SPORT0_ISR);        // прерывание данных SPORT0_ISR -> IVG9
    register_handler(ik_ivg10, Spi_ISR);      // Spi_ISR -> IVG10
    register_handler(ik_ivg11, Timer0_ISR);  // Timer0 ISR -> IVG 11
    register_handler(ik_ivg12, ADC_ISR);        // прерывание от АЦП (PF5) ADC_ISR -> IVG12

    // enable interrupts
    *pSIC_IMASK = 0
             | DMA1_IRQ        // прерывание приема SPORT0
             | DMA5_IRQ        // прерывание данных от SPI
             | TIMER0_IRQ    // прерывания от таймера 0
             | PFA_IRQ        // прерывание программируемого флага A
            ;
        
}


А вот само прерывание от SPI:

Код
EX_INTERRUPT_HANDLER(Spi_ISR)
{
    

    unsigned char buf = (unsigned char)*pSPI_RDBR; // чтение буфера приема и сброс запроса
                                                                                  // на прерывание
         // .........
}
ntk1
Спасибо!!! a14.gif
Вроде заработало.
Проблема в том что я впервые увидел BF полтора месяца назад. А аппетит начальства огромный. Купили дорогую железку, подавай через месяц готовую прогу.
Проблема в соединении с BF533 AD7276. Надо для начала записаль сигнал с частотй 192кГц на PC. Вроде всё сделано но работает, мягко говоря, некорректно.
Не подскажешь как правильно отображать сигнал в BTC, как его потом записать на PC. Желательно в формате читаемым MATLAB. Да, слышал о программах транслирующих код из MATLAB в BF. Даже есть одна, DSPdeveloper, не работает. Есть какая нибудь инфа?
Sergey manuchin
Цитата(ntk1 @ Feb 6 2007, 15:24) *
Спасибо!!! a14.gif
Вроде заработало.
Проблема в том что я впервые увидел BF полтора месяца назад. А аппетит начальства огромный. Купили дорогую железку, подавай через месяц готовую прогу.
Проблема в соединении с BF533 AD7276. Надо для начала записаль сигнал с частотй 192кГц на PC. Вроде всё сделано но работает, мягко говоря, некорректно.
Не подскажешь как правильно отображать сигнал в BTC, как его потом записать на PC. Желательно в формате читаемым MATLAB. Да, слышал о программах транслирующих код из MATLAB в BF. Даже есть одна, DSPdeveloper, не работает. Есть какая нибудь инфа?

Да легких путей мы не ищем smile.gif .
Для того чтобы не париться лучше всего сделать следующее:
На 533 борде живет совершенно нормальный RS-232. Легче всего сходить в магазин и купить девайс USB2SPI они зачастую работают на скорости 960К. На РС создаешь файл, с необходимыми данными. Причем любой прогай. Хоть "матлабом" хоть чем угодно(подойдет даже звук оцифрованый в pcm )...
Дальше не парясь просто читаешь этот файл в Com порт, предварительно его сконфигурив. Помоему
это тоже можно сделать матлабом. Хоть на С это делать и удобнее. Далее без проблем передаешь данные в BF. На BF их принемаешь обрабатываешь и отправляешь обратно. попутно на PC можно сделать с этими данными что угодно. В твоем случае с BTC лучше не заморачииваться. Тормозное это дело.
astronarh
Вчерась пораскидал мозгами. Может всетаки кто нибудь знает как транслировать код из MATLAB в BF.
Sergey manuchin
Цитата(astronarh @ Feb 7 2007, 13:08) *
Вчерась пораскидал мозгами. Может всетаки кто нибудь знает как транслировать код из MATLAB в BF.

На сколько я знаю никак. Такая фича есть только у TI в симулинке даже такой тулбокс есть... Однако наши ребята, которые пробовали, говорят что тормозное это дело. Руками намного быстрее получается.
А для БФ я даже в последнем матлабе такой фичи не видел
SergeyX
Цитата(astronarh @ Feb 7 2007, 14:08) *
Вчерась пораскидал мозгами. Может всетаки кто нибудь знает как транслировать код из MATLAB в BF.

из MATLAB в VisualDSP транслировать код невозможно...но Вы можете взглянуть на VisialAudio от AD...это коненчо не MATLAB, но ускорить процесс разработки софта при помощи среды разработки VisialAudio и библиотек вполне возможно.

...и еще - здесь http://www.analog.com/processors/pdf/visua...ForBlackfin.pdf найдете описание модулей библиотек VisualAudio для BF
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.