Moin. Habe auf die schnelle PWM-Beispiel (sehe Anhang) auf AT91SAM7S-EK-Board geflascht. Kann jedoch nirgendwo eine PWM entdecken. Laut Beispiel ist der PWM-Ausgang am PA11, oder? Wieso ist da kein Signal?
Ich verwende folgenden Code(unten). Es sollte doch am PA11 4792Hz
anliegen, oder?
// Include Standard files
#include "Board.h"
/* In this project we are assuming to have master clock equal to
47.9232 MHz
on the AT91SAM7SEK.*/
/* PWM Clock source Domain */
#define MCKtoPWM 0
#define MCK_2toPWM 1
#define MCK_4toPWM 2
#define MCK_8toPWM 3
#define MCK_16toPWM 4
#define MCK_32toPWM 5
#define MCK_64toPWM 6
#define MCK_128toPWM 7
#define MCK_256toPWM 8
#define MCK_512toPWM 9
#define MCK_1024toPWM 10
#define CLHAtoPWM 11
#define CLHBtoPWM 12
#define CALG_OFF 0
#define CALG_ON 1<<8 // The period is center aligned
(OFF, left aligned)
#define CPOL_OFF 0<<0 // The ouput waveform starts at a
high level (OFF, low level)
#define CPOL_ON 1<<9 // The ouput waveform starts at a
high level (OFF, low level)
#define CPD_ON 1<<10 // The period will be modified at
the next period start event
#define CPD_OFF 0<<10
/* Select the wanted frequency in hertz.
This choice has to be in accordance with the selected clock source */
#define FREQUENCY 4792 // In Hertz
/* In our example, we are targetting to get out 100 Hertz frequency. In
this goal, we use MCK_256toPWM */
#define PWM_PERIOD_VALUE (MCK/(1*FREQUENCY))
//*---------------------------------------------------------------------
-----------------
//* Function Name : Main
//* Object : Software entry point
//* Input Parameters : none.
//* Output Parameters : none.
//*---------------------------------------------------------------------
-----------------
int main()
{
/* Valid the PWM's Clock at PMC level */
AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC,1<<AT91C_ID_PWMC);
/* Disable the PWM the channel 0 */
AT91C_BASE_PWMC->PWMC_DIS = 0x1;
/* Enabling a PWM output through the PA11: PWM Channel 0*/
AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA, 0, AT91C_PA11_PWM0);
/* Period Updating */
AT91C_BASE_PWMC_CH0->PWMC_CMR = (CPD_ON | CPOL_OFF | CALG_OFF |
MCKtoPWM);
AT91C_BASE_PWMC_CH0->PWMC_CPRDR=PWM_PERIOD_VALUE;
/* Duty Cycle Updating */
AT91C_BASE_PWMC_CH0->PWMC_CMR = (CPD_OFF | CPOL_OFF | CALG_OFF |
MCKtoPWM);
AT91C_BASE_PWMC_CH0->PWMC_CDTYR = 0x01;
/* Interrupt enabling at peripheral level only in order to have
synchronisation between
Software and the UP-DATE Register (to avoid over writting) */
AT91C_BASE_PWMC->PWMC_IER = 1;
/* Enable the PWM the channel 0*/
AT91C_BASE_PWMC->PWMC_ENA = 0x1;
/* Infinit loop to avoid getting out */
while (1) ;
}
//* End
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.