NXP i.MX7D
модуль ШИМ
PWM в нашем проекте используется в двух местах - в подсветке экрана
и в динамике на Радужной шляпке.
Подсветка конечно более актуальна. Смотрите соотв.
файлы.
@ Переназначить ножки
MOV32 R0, IOMUXC_BASE
MOV R1, 7 @ Режим ALT7 для PWM4_OUT
STR R1, [R0, SW_MUX_CTL_PAD_GPIO1_IO11]
@ 100k PullUp, Pull enable, Hysteresis enable, Drive Strength ~49 ом
MOV R1, 3 << 5 + 1 << 4 + 1 << 3 + 1 << 0 @ Настройки ножек
STR R1, [R0, SW_PAD_CTL_PAD_GPIO1_IO11] @ Зависят от потребностей проекта
@ Затактируем модуль частотой 60 МГц
MOV32 R0, CCM_BASE + TARGET_ROOT109 @ PWM4_CLK_ROOT
MOV32 R1, 1 << ROOT_ENABLE + 2 << MUX + (2-1) << PRE_PODF + (1-1) << POST_PODF
STR R1, [R0] @ Источник: SYS_PLL_DIV4 / 2 = 480/4/2 = 60МГц
@ Включить тактирование
MOV32 R0, CCM_BASE + CCGR135 @ PWM4 clock gate
MOV R1, 0x00003333
STR R1, [R0]
@ Настроить модуль PWM4
MOV32 R0, PWM4_BASE
@ Длительность импульса
@ В нашем случае, определяет яркость подсветки экрана
MOV R1, 100
STR R1, [R0, PWMSAR]
@ Период ШИМ
@ Частота мерцания подсветки
MOV32 R1, 1000-2 @ 1МГц/1000 = 1000гц
STR R1, [R0, PWMPR]
@ Дополнительный делитель 60МГц на 60 = 1МГц
MOV32 R1, 1 << PWMCR_CLKSRC + (60-1) << PWMCR_PRESCALER + 1 << PWMCR_EN
STR R1, [R0, PWMCR] @ Импульсы пошли!
Ловите ШИМ на ножке!