1892ВМ10Я

Материал из WIKI ELVEES


Вопросы по программному обеспечению

Как считать/запись значения регистров СР0 в программе на С?

Для работы с регистрами CP0 в языке Си необходимо использовать ассемблерные вставки.

Компилятор GCC предусматривает специальные конструкции, упрощающие работу с такими вставками. Они описаны в документации на компилятор, в частности здесь: https://gcc.gnu.org/onlinedocs/gcc-4.8.5/gcc/Extended-Asm.html#Extended-Asm

Как сбросить бит EXL регистра CP0 Status?

Сброс бита EXL происходит при переключении из привилегированного режима процессора в обычный режим. Такое переключение осуществляется только командой "eret".

Есть ли пример для работы с DSP на C?

В примерах проектов MCStudio 4 для NVCom-02T существует пример dsp_library_main. При его запуске добавляется папка с примером dsplib. Для работы с ним необходимо сначала собрать проект dsplib, после чего собрать проект dsp_library_main. Отладка производится из проекта dsp_library_main.

Вопросы по аппаратной части

В руководстве пользователя на микросхему в разделе 8.4 "Каналы DMA для портов" указано допустимое число слов данных WN от 8 до 16 слов. Можно ли передавать меньше 8 слов?

Да, меньше 8 слов передать можно.
Реальное число слов данных, которое надо передать, задаётся через поле WCX.WN – это длина пачки слов, передаваемой по внутренней шине. Посредством этого параметра можно плавно изменять приоритет каналов DMA относительно других устройств и относительно друг друга.

Возможно ли настроить SPI c автоматическим выставлением сигнала SS[0] (SS_DO = 0), но с заданием задержки выставления сигнала SS[0] относительно MOSI?

Величиной задержки между падением SS в 0 и началом передачи слова можно управлять через регистр TSS_RATE.
Сам по себе этот регистр предназначен для управления задержкой между передачей двух слов (т.е. длительностью пребывания SS в 1). Однако вместе с этой величиной пропорционально изменяются ещё и задержки перед установкой SS в 1 и после его падения в 0.

Как разместить программу в кэш-памяти?

Расположить программу в кэш-памяти нельзя. Можно расположить ее в кэшируемом сегменте виртуальных адресов и включить кэширование. Кэширование сегмента включается записью нужного значения в соответствующее поле регистра CP0.Config (или CP0.Config1, в зависимости от сегмента). Часть сегментов виртуальных адресов является некэшируемой. Таким образом, в одном и том же диапазоне физических адресов могут быть расположены как кэшируемые данные/код, так и некэшируемые.
Подробнее о преобразовании адресов и кэшировании можно прочитать в одноименном документе https://elvees.ru/mc/data_sheets/mc_start_memory.pdf.

Нестандартные вопросы