zemlemer 0 8 сентября, 2022 Опубликовано 8 сентября, 2022 · Жалоба Добрый день. У меня возникла проблема с DSP частью OMAPL138. Есть программа написанная с использованием BIOS от TI т.к. многое завязано на mailbox-ы с ARM-овской частью. Мне необходимо отлавливать прерывания более 100 КГц на GP ногу и делать элеметарное: посылать в SPI байт. Сделал по документации HWREG_32(GPIO_DIR8) |= (1 << 2); // input HWREG_32(GPIO_DIR8) &= ~(1 << 1); // output HWREG_32(GPIO_CLR_DATA8) |= (1 << 1); // Enabling interrupt in a busy signal Error_init(&errBlock); Hwi_Params_init(&hwiExtIntParams); hwiExtIntParams.eventId = GPIO_B8_EVENT_ID; hwiExtIntParams.priority = GPIO_B8_INT_ID; hwiExtIntParams.maskSetting = Hwi_MaskingOption_SELF; // don't allow this interrupt to nest itself hwiExtIntHandle = Hwi_create(GPIO_B8_INT_ID, hwiGP82Isr, &hwiExtIntParams, &errBlock); if(NULL == hwiExtIntHandle) { Log_print0(Diags_INFO, "-beam adc- GPIO8[2] interrupt handle was not initialized"); return -1; } if (Error_check(&errBlock)) { Log_print0(Diags_INFO, "-beam adc- GPIO8[2] hardware interrupt setup failed"); return -1; } Hwi_enable(); // TODO: Check and remove later // Configuring busy signal to falling egde HWREG_32(GPIO_SET_FAL_TRIG8) |= (1 << 2); HWREG_32(GPIO_CLR_RIS_TRIG8) |= (1 << 2);; // Enable Bank8 interrupt HWREG_32(GPIO_BINTEN) |= (1 << 8); static void hwiGP82Isr(UArg arg0) { SPI0_SET_CS; Hwi_clearInterrupt(GPIO_B8_INT_ID); HWREG_32(GPIO_INTSTAT8) = 0xFFFFU; //(1 << 2); // 0xFFFFU; SPI0_CLR_CS; return; } Процессор, судя по отдалке внутри прерывания(дергаю ногой), не успевает обработать его. При зтом сама обработка прерывания быстрая, по времени укладываюсь. Сложилось впечатление, что сам диспечер задач BIOS тормозит вхождение в прерывание. Можно ли написать прерывание не привязанное к BIOS? Если да, то как лучше это сделать? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 8 сентября, 2022 Опубликовано 8 сентября, 2022 · Жалоба Лучше бы на PRU организовать: прерывать процессор на 100+кГц - не очень хорошая идея безотносительно DSP/BIOS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zemlemer 0 10 ноября, 2022 Опубликовано 10 ноября, 2022 · Жалоба Добрый день. Долгие бодания с DMA ни к чему не привели. Т.е. привели к работе, но с полной загрузкой процессора. Есть несколько вопросов по PRU. 1. Я правильно понимаю, что само упраление предельно простое: Поставить через CONTROL регистр в reset и снять enable, загрузить программу и выстваить enable. 2. Можно ли написать короткую программу на C и собрать ее как-то для PRU? 3. Есть примеры работы с PRU? Я не нашел нормальных примеров работы с PRU, а в тех что есть используеся pasm, пытался собрать с asm6x - не получилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 194 11 ноября, 2022 Опубликовано 11 ноября, 2022 · Жалоба Не знаю насчёт последних версий pasm, но CCS 3.3 нормально транслировал asm. Про си не знаю - в те времена когда я писал для PRU, си-компилятора для него не существовало. Да и к тому же - если у вас проблемы с быстродействием и хотите ногодрыжить на высоких частотах, то про си лучше забыть. имхо. А процесс загрузки как PRU-ядер так и ARM/DSP помнится был прекрасно описан в доках TI. Пошагово. Да и примеры в CCS вроде были. Я делал по ним. Неужто их оттуда уже убрали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться