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); }
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); }
//---------------------------------------------------------------------------- // Функция настройки канала 0 PWM //---------------------------------------------------------------------------- void AT91F_Set_PWM_Channel0(U16 PERIOD, U16 DUTY) { // - используется делитель A // - CALG=0 выравнивание по левой границе // - CPOL=1 старт с высокого уровня AT91C_BASE_PWMC_CH0->PWMC_CMR = AT91C_PWMC_CPRE_MCKA | CPOL_ON | CALG_OFF ; //активизация заданных установок мгновенно AT91C_BASE_PWMC_CH0->PWMC_CPRDR = PERIOD; //период AT91C_BASE_PWMC_CH0->PWMC_CDTYR = DUTY; //рабочий цикл //запуск канала 0 PWM AT91F_PWMC_StartChannel(AT91C_BASE_PWMC,AT91C_PWMC_CHID0); }