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] @ Импульсы пошли!
	

Ловите ШИМ на ножке!