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

sundownhunter

Участник
  • Постов

    11
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Посетители профиля

585 просмотров профиля
  • antis

  1. Еще один вопрос по PIC24. Есть проект бутлоадера, созданного на базе MCC 16-bit bootloader (чтобы не запариваться с линкером и так далее). Есть проект Application, в котором указано, что используется этот самый бутлоадер. И там и там используются прерывания UART1 RX. При переходе из Bootloader'а в приложение, прерывания, само собой не работают (срабатывают в бутлоадере, как я понимаю, потому что они жестко прописаны в ROM). Как заставить работать прерывания и там и там? Пробовал использовать альтернативную таблицу прерываний ( выставив необходимые биты согласно этому документу ), вкорячив в бутлоадере после инициализиции INTCON2bits.AIVTEN = 1; в бутлоадере _AltU1RXInterrupt вызывается, но при переходе в приложение и возврат на дефолтную таблицу (INTCON2bits.AIVTEN = 0) - в приложении Target Halted. Наоборот (в бутлоадере - дефолтная, в приложении - альтернативная) - тоже не работает. Как вообще использовать прерывания и там и там? Есть ли такая возможность? Подскажите \ посоветуйте \ может пример у кого есть ...
  2. Разобрался сам. Проблема была в нехватке подтяжки пина ... 😐 (IOCPUE = 0x0020) Тему можно удалить
  3. Добрый день! Новичок в PIC, и пока не понимаю куда копать. Есть плата с данным контроллером. UART контроллера уходит в трансивер, который управляется сигналом DE (1 - TX, 0 - RX). Создаю проект с нуля. Выставляю клоки, без PLL, добавляю модуль UART и DELAY все оставляю по-дефолту. Пишу примитивный код: #include "mcc_generated_files/system.h" #include "mcc_generated_files/uart1.h" #include "mcc_generated_files/pin_manager.h" #include "mcc_generated_files/delay.h" //#define UART_TRANSMIT_FW static uint8_t _byte = 0; int main(void) { // initialize the device SYSTEM_Initialize(); #ifdef UART_TRANSMIT_FW UART_DE_SetHigh(); while (1) { DELAY_milliseconds(300); UART1_Write(_byte++); } #else UART_DE_SetLow(); while (1) { _byte = UART1_Read(); asm(" NOP "); } #endif return 1; } Раскоменчиваю define UART_TRANSMIT_FW, на другой стороне опускаю у аналогичного трансивера сигнал DE, открываю Putty на нужной скорости, и - все работает. Закомменчиваю дефайн, на другой стороне поднимаю DE, открываю Putty на нужной скорости, тыкаю в клавиатуру - когда тыкаю "0" - вижу 0x20, когда "6" - вижу 0x24, когда "8" - вижу 0x30. Эта ахинея всегда одинаковая при нажатии на одинаковую кнопку. При всем этом, на 9600 работает стабильно. Но конечно 9600 это слишком медленно ... Ума не приложу, где я что делаю не так. Подскажите, в какую сторону копать? test.X.7z
  4. Добрый день! Столкнулся с проблемой. Есть блок, у него есть параметр PARAM. Мне нужно, чтобы если PARAM == 0 компилировался блок кода A, если он равен 1, то компилировался блок кода B. Я понимаю, что можно сделать простым условием, но проблема вот в чем. В блоке A мне нужна конструкция always_comb, в блоке B - always_ff. т.е. я хочу на выходе при компиляции получить следующее: PARAM == 0: always_comb begin ... блок кода A ... end PARAM == 1: always_ff(@posedge clk) begin ... блок кода B ... end т.е. блок полностью меняется в зависимости от параметра. Подскажите, как это сделать - весь гугол перерыл.... Квартус 9.1
  5. Сделал немного иначе. Любое перекладывание данных из 32 в 1...16 (параметр), используя всего 64 бита памяти. Всем спасибо за советы!
  6. Выходной поток 10-битный тоже должен не прерываться (ну за исключением прореживания пакетов, конечно же), пакет FC целиком умещается в fifo, следующий пакет приходит спустя такое время, за которое все это fifo на той же частоте можно успеть вычитать с необходимым прореживанием, естественно, частота чтения из fifo будет значительно выше.
  7. Добрый день, уважаемые! Возникла затычка в одной задачке. Есть fifo, подпитываемое по FibreChannel. Вход фифо-32 бита, сторона чтения перенесена на другую частоту. Идут данные камеры, они уложены по 32бита, в одном пикселе 10 бит, сплошным куском. Т.е. 5 слов по 32 бита - это 16 пикселей по 10 бит. Необходимо "раздербанить" такой поток малой кровью и создать новый 10-битный поток. В идеале - параметризировать блок и решить задачу для общего случая, если количество бит на пиксель 8...16. Допустим, что даже если частоты чтения и записи равны, времени на вычитывание и "дербанивание" потока хватает. Меня интересует лишь принцип такого преобразования... Очень прошу помочь, весь моск сломал.
  8. поставил .MatrixIN (matrix'(MatrixIN[4:0][i+:4])),, ошибка та же самая в этой же строке ... :(
  9. Добрый день! Я новичок в SystemVerilog, и я столкнулся с проблемой, которую не могу решить самостоятельно. Прошу помочь. Проблема следующая. Есть блок, который задерживает некий сигнал, и формирует из него матрицу: Получаем на выходе блока 65 проводов. Есть следующий блок, который представляет собой фильтр: и есть третий блок, который должен соединить 9 таких фильтров "каскадом" (т.е. с первого блока выходит матрица [12:0][4:0], и на первый фильтр должны быть поданы сигналы [4:0][4:0], на второй - [5:1][4:0] ... на последний - [12:8][4:0]): Первый и второй блок синтезируются без вопросов, все окей. в последнем блоке квартус ругается на строчку вот такой ошибкой: Очень прошу помочь. P.S. Конструкции вида input logic [DATA_WIDTH-1:0] [24:0] MatrixIN (пакованный массив?) в блоках не могут использоваться, ибо в фильтрах на входе знаковые числа (какого-то хрена квартус не понимает знаковые числа в шине) ...
×
×
  • Создать...