1 | #include <Arduino.h>
|
2 |
|
3 | void setup()
|
4 | {
|
5 | PWMC_InitializeSync(6, 9, 1000, 1000, 250);
|
6 | }
|
7 |
|
8 | void loop()
|
9 | {
|
10 | }
|
11 |
|
12 | void PWMC_InitializeSync(uint32_t ArduinoPin1, uint32_t ArduinoPin2, uint32_t PwmFrequency, uint16_t PwmPeriod, uint16_t PwmDutyCycle)
|
13 | {
|
14 | if ( (PwmFrequency*PwmPeriod) < VARIANT_MCK )
|
15 | {
|
16 | pmc_enable_periph_clk(PWM_INTERFACE_ID);
|
17 | PWMC_ConfigureClocks(0, (PwmFrequency*PwmPeriod), VARIANT_MCK);
|
18 |
|
19 | PIO_Configure(
|
20 | g_APinDescription[ArduinoPin1].pPort,
|
21 | g_APinDescription[ArduinoPin1].ulPinType,
|
22 | g_APinDescription[ArduinoPin1].ulPin,
|
23 | g_APinDescription[ArduinoPin1].ulPinConfiguration);
|
24 |
|
25 | PIO_Configure(
|
26 | g_APinDescription[ArduinoPin2].pPort,
|
27 | g_APinDescription[ArduinoPin2].ulPinType,
|
28 | g_APinDescription[ArduinoPin2].ulPin,
|
29 | g_APinDescription[ArduinoPin2].ulPinConfiguration);
|
30 |
|
31 | /*PIO_Configure(
|
32 | g_APinDescription[0].pPort,
|
33 | g_APinDescription[0].ulPinType,
|
34 | g_APinDescription[0].ulPin,
|
35 | g_APinDescription[0].ulPinConfiguration);*/
|
36 |
|
37 | uint32_t channel1 = g_APinDescription[ArduinoPin1].ulPWMChannel;
|
38 | uint32_t channel2 = g_APinDescription[ArduinoPin2].ulPWMChannel;
|
39 | uint32_t channels = (1<<channel1) | (1<<channel2) | (1<<0);
|
40 |
|
41 | PWMC_ConfigureChannel(PWM_INTERFACE, 0, PWM_CMR_CPRE_CLKB, 0, 0);
|
42 | PWMC_ConfigureChannel(PWM_INTERFACE, channel1, PWM_CMR_CPRE_CLKB, 0, PWM_CMR_CPOL);
|
43 | PWMC_ConfigureChannel(PWM_INTERFACE, channel2, PWM_CMR_CPRE_CLKB, 0, 0);
|
44 |
|
45 | PWMC_SetPeriod(PWM_INTERFACE, channel1, PwmPeriod);
|
46 | PWMC_SetDutyCycle(PWM_INTERFACE, channel1, PwmDutyCycle);
|
47 |
|
48 | PWMC_SetPeriod(PWM_INTERFACE, channel2, PwmPeriod);
|
49 | PWMC_SetDutyCycle(PWM_INTERFACE, channel2, PwmDutyCycle);
|
50 |
|
51 | PWMC_SetPeriod(PWM_INTERFACE, 0, PwmPeriod);
|
52 | PWMC_SetDutyCycle(PWM_INTERFACE, 0, PwmDutyCycle);
|
53 |
|
54 | PWMC_ConfigureSyncChannel(PWM_INTERFACE, channels, PWM_SCM_UPDM_MODE1, 0, 0);
|
55 | PWMC_SetSyncChannelUpdatePeriod(PWM_INTERFACE, PwmPeriod);
|
56 |
|
57 | PWMC_EnableChannel(PWM_INTERFACE, 0);
|
58 | }
|
59 | }
|