void Init_PWM(void) { AT91F_PWMC_InterruptDisable(AT91C_BASE_PWMC, AT91C_PWMC_CHID0); AT91F_PMC_EnablePeriphClock( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ); AT91F_PWMC_CH0_CfgPIO(); AT91F_PWMC_CfgPMC(); AT91F_PWMC_StopChannel(AT91C_BASE_PWMC, AT91C_PWMC_CHID0); AT91F_PWMC_CfgChannel(AT91C_BASE_PWMC, 0, 1 | AT91C_PWMC_CPOL, 100000, 66000); AT91F_PWMC_UpdateChannel(AT91C_BASE_PWMC, AT91C_PWMC_CHID0, 0); AT91F_PWMC_StopChannel(AT91C_BASE_PWMC, AT91C_PWMC_CHID0); AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, 0, AT91C_PA23_PWM0); AT91F_PWMC_StartChannel(AT91C_BASE_PWMC, AT91C_PWMC_CHID0); }
void setForce(int force) { AT91F_PWMC_StopChannel(AT91C_BASE_PWMC, AT91C_PWMC_CHID0); AT91F_PWMC_CfgChannel(AT91C_BASE_PWMC, 0, 1 | AT91C_PWMC_CPOL, 100000, force); AT91F_PWMC_UpdateChannel(AT91C_BASE_PWMC, AT91C_PWMC_CHID0, 0); AT91F_PWMC_StartChannel(AT91C_BASE_PWMC, AT91C_PWMC_CHID0); }
//---------------------------------------------------------------------------- // Функция инициализации PWM //---------------------------------------------------------------------------- void AT91F_PWM_Open(U8 SIGN_SINHR, U8 DIVIDER) { //Разрешение выхода PWM в контроллере PIO (PA11, канал 0 PWM) AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, 0, AT91C_PA11_PWM0); //Разрешение синхронизации PWM AT91F_PWMC_CfgPMC (); //Остановка канала 0 PWM AT91F_PWMC_StopChannel(AT91C_BASE_PWMC,AT91C_PWMC_CHID0); //Установки делителя A (выбор источника синхрочастоты и задание коэфф деления делителя) AT91C_BASE_PWMC->PWMC_MR = (( SIGN_SINHR << 8 ) | DIVIDER); }