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

GenaSPB

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

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

  • Посещение

  • Победитель дней

    2

Весь контент GenaSPB


  1. Ясность появилась. Сохранение/восстановление перделал как надо (32 без двух целочисленных регистров и 32 double). сохранение/восстановление mstatus, mpc, mcause вокруг вызова обработчика (под запрещенным через mstatus.MIE запросами). void VMEI_Handler(void) { const uint_fast16_t int_id = PLIC->PLIC_MCLAIM_REG; PRINTF("VMEI_Handler enter: int_id=%u\n", int_id); if (int_id != 0) { //const uint32_t prio = PLIC->PLIC_MTH_REG; #if WITHNESTEDINTERRUPTS const uint_fast8_t priority = PLIC->PLIC_MTH_REG; /* текущий уровень приоритета */ PLIC->PLIC_MTH_REG = PLIC->PLIC_PRIO_REGn [int_id]; /* обрабатываемый уровень приоритета */ const uint_xlen_t mepc = csr_read_mepc(); const uint_xlen_t mcause = csr_read_mcause(); const uint_xlen_t mstatus = csr_read_set_bits_mstatus(MSTATUS_MIE_BIT_MASK); /* раразршение прерываний */ ASSERT((mstatus & MSTATUS_MIE_BIT_MASK) == 0); /* прерывания были запрещены при входе в обработчик */ #endif /* WITHNESTEDINTERRUPTS */ __FPU_Enable(); ASSERT(int_id < MAX_IRQ_n); (plic_vectors [int_id])(); #if WITHNESTEDINTERRUPTS csr_write_mstatus(mstatus); csr_write_mcause(mcause); csr_write_mepc(mepc); PLIC->PLIC_MTH_REG = priority; /* восстанавливаем обрабатываемый уровень приоритета */ #endif /* WITHNESTEDINTERRUPTS */ //PLIC->PLIC_MTH_REG = prio; PRINTF("VMEI_Handler exit: int_id=%u\n", int_id); PLIC->PLIC_MCLAIM_REG = int_id; /* EOI */ } } Я правильно понял, что сперва в архитектуре источники запосов проходят через регистр mie - а затем фильтруется mstatus.MIE ? ... осталось разобравтьс с PLIC - выдает прерывания того же приоритета до EOI обрабатываемого. Ожиждаемое поведление - прерывается только более высоким приоритетом
  2. Так я все gp и плавучку сохраняю . В Isa не понял откуда адрес берет.
  3. Но хоть lr или еще что-то должно... mret ведь предполагает что-то для возврата... зы: rv64 должен сохранять 8 байт ргистры. Вот мой стартап файл: Так и в Cortex-A это ручками делается... Смысл диктуется имеющимся многоплатформенным проектом. Короче вопрос уточняю - что использует mret кроме сосотояния флага? На Corex-A содержимое стекового фрейма обработчика переносится в общий стек
  4. Пытаюсь сделать вложенные прерывания = но нигде не могу найти инфу, что же в стеке сохраняется из стсотояния процессора. Судя по отладке, 64 быайта сохранены... RV64.
  5. У вас есть код фильтрации из примера cmsis. Построить массив параметров функциями что я прислал или любым генератором. И всё.
  6. Это расчеты для симметричных FIR (с нечетным количеством отводов) - формирует половинку от массива. Для увеличения крутизны скатов еще "оконную" функцию к массиву применяют.
  7. CMSIS-DSP\Examples\ARM\arm_fir_example не?
  8. Cadence Xtensa HiFi4 DSP Так же и в составе Allwinner T113-S3 есть. Где-то должен существовать компилятор С для этого процессора от Cadence - XCC https://docs.zephyrproject.org/3.2.0/develop/toolchains/cadence_xcc.html Есть документ по архитектуре HiFi 3- hifi_3_dsp.pdf
  9. На гитхабе можете полный cmsis header скачать с тем что описано в доке и что удалось расковырять. Тут Бранч develop
  10. Колега поднял CAN на Allwinner-t113-s3 Не забыть в CCU тактирование включить и reset отпустить...
  11. Коллега специально не хочет оптимизацию включать... -O1 у него предел.
  12. Allwiner F133-A (D1-s)

    Специфическое это gic, mmu, axi в ccu.. кеш. T113s3 это два ядра а не одно, тут чего уж сравнивать... в dsp приложениях у меня существенно.
  13. Allwiner F133-A (D1-s)

    Творческий интерес. Ну очень много шума про risc-v вокруг, а тут подвернулось устройство, которое можно запустить не изучая периферию а сосредоточившись чисто на новой архитектуре... на ядре. Периферия этого процессора совпадает с t113s3 той же фирмы. Кроме специфического для ARM. И запущена Cmsis dsp библиотека. Этакий угон совершил. Но там качественно написано, всё просто комплиоируется. Тестировал на проекте sdr. Те же openvg картинки гонял - как проверка устойчивости работы под нагрузкой для fpu.
  14. Allwiner F133-A (D1-s)

    Ну и как впечатления относительно кортекса? Подитожу. Производительность на одинаковых мегагерцах сопоставима с кортексами А.
  15. Allwiner F133-A (D1-s)

    Разобрался с сильно мешавшей ошибкой в чужом коде управления кеш-памятью с использованием ассемблерных вставок. Начиная с того что работало только на минимальном уроне оптимизации (-Og), так у оригинала была еще ошибка в коде операции dcache.cpa Вот так выглядит работающее: Танцы вокруг работы со специфическими для ядра С906 командами, которых не знает riscv gcc/as
  16. Контроллеры прерываний в современной технике обычно поддерживают вложенность, на некоторых архитектурах требуются программные извращения (Cortex-A) для поддержки вложенности.
  17. Cortex-A (GIC), Cortex-M (NVIC), RISC-V (PLIC) - все три проверено - поддерживают
  18. Allwiner F133-A (D1-s)

    Подразобрался с загрузчиком с SPI NOR FLASH. Научил свою утилиту формировать команду перехода на начало образа в кодах risc-v. Выяснилось, что адрес загрузки всегда 0x20000 вне зависимости от того значения, что в заголовке написано. Используемый мною код инициализации DDR(2) не очень работает на этом процессоре. А вариант прямого использования образа что грузит утилита xfel не получается простыми способами - скомпилировано под стартовый адрес 0x20000 https://raw.githubusercontent.com/ua1arn/hftrx/develop/tools/egontool/egontool.c
  19. ноль в этом регистре вроде про это
  20. В этом режиме не требуется
  21. Есть режим трансляции один-в-один - его используете? // 3.1.6 Virtualization Management Field in mstatus Register // Table 3.3: Encoding of virtualization management field VM[4:0]
×
×
  • Создать...