2. 2
Работа с битами и невыровненными
данными
1. Bit-Band
2. Обращения к невыровненным данным
3. 3
При описании процессора Cortex-M3 мы используем
термин bit-band, чтобы подчеркнуть наличие
специальной области памяти (band),
поддерживающей побитовую адресацию. Термином
же bit-bang обычно обозначается программное
управление контактами ввода/вывода с целью
реализации функций последовательной передачи
данных.
4. 4
1. Bit-Band.
Bit Banding – термин, который использует ARM для
обозначения механизма доступного в Cortex M3.
5. 5
• Область хранения битов (bit-band region) —
область памяти, поддерживающая доступ по методу
bit-band.
• Адрес доступа к биту(bit-band alias) — обращение
по этому адресу вызывает обращение к области
хранения битов (т.е. производится переадресация).
19. 19
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)
• bit_band_base - Базовый адрес области доступа к битам
• byte_offset - Смещение в байтах по отношению базовому адресу
исходной области памяти
• bit_number – номер изменяемого бита
Например, для доступа к регистру ODR порта D:
bit_band_base = 0x42000000
Смещение:
0x40020C14 - 0x40000000 = 0x20C14
• 0x40000000 – начало области памяти периферии
Получаем адрес нулевого бита:
0x42418280 = (0x42000000 + ((0x40020C14)-0x40000000)*32)
20. 20
#define PORTD ((uint32_t *)((0x42000000 + ((0x40020C14)-
0x40000000)*32)))
И теперь для включения светодиода на ноге 12 нужно написать вот
такую строку:
PORTD[12] = 1;
Для выключения:
PORTD[12] = 0;
23. 23
ограничения:
• невыровненные пересылки не поддерживаются
командами групповой загрузки/сохранения;
• операции со стеком (команды PUSH/POP) должны
быть выровнены;
• команды монопольного доступа, такие как LDREX
или STREX, должны обращаться только к
выровненным данным; в противном случае, будет
возникать исключение Usage Fault;
• невыровненные пересылки не поддерживаются
при побитовых операциях с использованием метода
bit-band. Если вы всё же попытаетесь так сделать,
то результат будет непредсказуемым.