[an error occurred while processing this directive]
|
Ещё я использую вставку, чтобы сделать подобные комментарии
при инициализации различного рода регистров какой-либо
"аппаратуры" (т.к. не знаю как задать переменной значение
в двоичном коде на Си):// Здесь пример Си-кода для AVR
...
uchar value;
...
// USART Control and Status Register B
asm volatile (
"ldi %0, 0b11111000;" : "=r"(value) : );
// ||||||||
// |||||||+- TXB8: Transmit Data Bit 8
// ||||||+-- RXB8: Receive Data Bit 8
// |||||+--- UCSZ2: Character Size
// ||||+---- TXEN: Transmitter Enable
// |||+----- RXEN: Receiver Enable
// ||+------ UDRIE: USART Data Register Empty Interrupt Enable
// |+------- TXCIE: TX Complete Interrupt Enable
// +-------- RXCIE: RX Complete Interrupt Enable
UCSRB = value; // включаем прерывания по приёму и передаче, пустой UDR
...// Здесь пример Си-кода для ADSP
...
unsigned int value;
...
// Регистры маскирования (IMASK) и фиксации (IRPTL) прерываний
// Инициализация после сброса 0x0000
asm("%0 = b#0110000000000000;" : "=g"(value) : );
// ||||||||||||||||
// |||||||||||||||+- EMU (прерывание эмулятора (не маскируемо)), высший приоритет
// ||||||||||||||+-- PWDN (прерывание выключения питания, маскируемо)
// |||||||||||||+--- KERNEL (ядро эмулятора)
// ||||||||||||+---- STACK (прерывание стека). Генерируется при помещении или
// |||||||||||| извлечении данных из стека PC, переходе за границу уровня
// |||||||||||| стека PC, переполнении или потере значащих разрядов
// |||||||||||| стеков PC или состояния, переполнении любого стека.
// ||||||||||||
// |||||||||||| UDI (определяемые пользователем прерывания) каждый бит
// |||||||||||| отвечает за одно прерывание, бит 15 имеет низший приоритет.
// |||||||||||+----- Ведомый DMA/ Интерфейс хост-порта (Host Port DMA)
// ||||||||||+------ Приём SPORT0
// |||||||||+------- Передача SPORT0
// ||||||||+-------- Приём SPORT1
// |||||||+--------- Передача SPORT1
// ||||||+---------- Приём SPORT2 / SPI0
// |||||+----------- Передача SPORT2 / SPI1
// ||||+------------ Прием UART
// |||+------------- Передача UART
// ||+-------------- Таймер 0
// |+--------------- Таймер 1
// +---------------- Таймер 2, Программируемый флаг 0 & 1, Порт memDMA (Memory DMA)
sysreg_write(sysreg_IMASK, value); // Маскируем прерывания
...
E-mail: info@telesys.ru