Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- volatile bool ms_flag = false;
- int elapsedTime = 0;
- bool positive = true;
- float voltageFactor = 1;
- #define REG_TC0_SR0 (*(volatile uint32_t*)0x40080020)
- void TC0_Handler() {
- REG_TC0_SR0;
- ms_flag = true;
- }
- void setup() {
- Serial.begin(115200);
- REG_PMC_PCER1 |= PMC_PCER1_PID36; // Enable PWM peripheral (PID36)
- REG_PIOC_ABSR |= PIO_ABSR_P23 | PIO_ABSR_P24; // Set pins to Peripheral B
- REG_PIOC_PDR |= PIO_PDR_P23 | PIO_PDR_P24; // Disable PIO control
- REG_PWM_CLK = PWM_CLK_PREA(0) | PWM_CLK_DIVA(1); //Set global PWM clock rate to 84MHz (84MHz/1)
- REG_PWM_CMR6 = PWM_CMR_CPRE_CLKA; // Enable single slope PWM, clock source CLKA
- REG_PWM_CPRD6 = 4200; // Set period (20kHz frequency)
- REG_PWM_CDTY6 = 0; // Set duty cycle (0%)
- REG_PWM_CMR7 = PWM_CMR_CPRE_CLKA; // Enable single slope PWM, clock source CLKA
- REG_PWM_CPRD7 = 4200; // Set period (20kHz frequency)
- REG_PWM_CDTY7 = 0; // Set duty cycle (0%)
- REG_PWM_ENA = PWM_ENA_CHID6 | PWM_ENA_CHID7; // Enable the PWM channels
- REG_PWM_SCUP = 1U;
- REG_PWM_SCUC = (1U << 6) | (1U << 7);
- REG_PMC_PCER0 |= PMC_PCER0_PID27;
- REG_TC0_CMR0 = 0x02 | TC_CMR_CPCTRG;
- REG_TC0_RC0 = 2625;
- REG_TC0_IER0 = TC_IER_CPCS; // Enable the RC Compare Interrupt (CPCS) in the Timer Counter
- NVIC_EnableIRQ(TC0_IRQn);
- REG_TC0_CCR0 = TC_CCR_CLKEN | TC_CCR_SWTRG; // Enable and start the Timer Channel
- delay(5000); // Delay before starting
- }
- void loop() {
- if (ms_flag) {
- noInterrupts();
- elapsedTime = elapsedTime + 1;
- ms_flag = false;
- interrupts();
- if (elapsedTime > 50) {
- positive = !positive;
- elapsedTime = 1;
- }
- Serial.print("ms: ");
- Serial.print(elapsedTime);
- Serial.print(", Direction: ");
- Serial.println(positive ? "UP" : "DOWN");
- float dutyFactor = sin( (2.0 * PI / 100.0) * elapsedTime );
- if (positive) {
- REG_PWM_CDTY6 = dutyFactor * 4200 * voltageFactor;
- REG_PWM_CDTY7 = 0;
- } else {
- REG_PWM_CDTY6 = 0;
- REG_PWM_CDTY7 = dutyFactor * 4200 * voltageFactor;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment