Trident IoT SDK
Loading...
Searching...
No Matches
Collaboration diagram for PWM CM11:

Data Structures

struct  PWM_REGISTERS_T
 the struct we use so we can address registers using field names More...
struct  tr_hal_pwm_settings_t

Macros

#define TR_HAL_NUM_PWM   5
#define PWM_DEFAULT_PIN   20
#define CHIP_MEMORY_MAP_PWM0_BASE   (0xA0C00000UL)
 chip register addresses section 3.1 of the data sheet explains the Memory map. this gives the base address for how to write the chip registers the chip registers are how the software interacts and configures the PWM peripherals. We create a struct below that addresses the individual registers. This makes it so we can use this base address and a struct field to read or write a chip register
#define CHIP_MEMORY_MAP_PWM1_BASE   (0xA0C00100UL)
#define CHIP_MEMORY_MAP_PWM2_BASE   (0xA0C00200UL)
#define CHIP_MEMORY_MAP_PWM3_BASE   (0xA0C00300UL)
#define CHIP_MEMORY_MAP_PWM4_BASE   (0xA0C00400UL)
#define PWM0_REGISTERS   ((PWM_REGISTERS_T *) CHIP_MEMORY_MAP_PWM0_BASE)
#define PWM1_REGISTERS   ((PWM_REGISTERS_T *) CHIP_MEMORY_MAP_PWM1_BASE)
#define PWM2_REGISTERS   ((PWM_REGISTERS_T *) CHIP_MEMORY_MAP_PWM2_BASE)
#define PWM3_REGISTERS   ((PWM_REGISTERS_T *) CHIP_MEMORY_MAP_PWM3_BASE)
#define PWM4_REGISTERS   ((PWM_REGISTERS_T *) CHIP_MEMORY_MAP_PWM4_BASE)
#define PWM_CTRL_REG_ENABLE_PWM   0x01
#define PWM_CTRL_REG_DISABLE_PWM   0x00
#define PWM_CTRL_REG_ENABLE_CLK   0x02
#define PWM_CTRL_REG_DISABLE_CLK   0x00
#define PWM_CTRL_REG_RESET   0x01
#define PWM_CTRL_REG_RSEQ_FIRST   0x00
#define PWM_CTRL_REG_TSEQ_FIRST   0x01
#define PWM_CTRL_REG_ONE_SEQUENCE   0x00
#define PWM_CTRL_REG_TWO_SEQUENCE   0x02
#define PWM_CTRL_REG_NON_CONTINUOUS   0x00
#define PWM_CTRL_REG_CONTINUOUS   0x04
#define PWM_CTRL_REG_DMA_FORMAT_0   0x00
#define PWM_CTRL_REG_DMA_FORMAT_1   0x08
#define PWM_CTRL_REG_UP_COUNTER   0x00
#define PWM_CTRL_REG_DOWN_AND_UP_COUNTER   0x10
#define PWM_CTRL_REG_TRIGGER_ON_ENABLE   0x00
#define PWM_CTRL_REG_TRIGGER_ON_FIFO   0x20
#define PWM_CTRL_REG_NO_AUTO_TRIGGER   0x00
#define PWM_CTRL_REG_AUTO_TRIGGER   0x40
#define PWM_CLK_DIV_1   0x0000
#define PWM_CLK_DIV_2   0x0100
#define PWM_CLK_DIV_4   0x0200
#define PWM_CLK_DIV_8   0x0300
#define PWM_CLK_DIV_16   0x0400
#define PWM_CLK_DIV_32   0x0500
#define PWM_CLK_DIV_64   0x0600
#define PWM_CLK_DIV_128   0x0700
#define PWM_CLK_DIV_256   0x0800
#define PWM_CLK_DIV_MASK   0x0F00
#define PWM_CTRL_REG_TRIGGER_ON_PWM0   0x0000
#define PWM_CTRL_REG_TRIGGER_ON_PWM1   0x1000
#define PWM_CTRL_REG_TRIGGER_ON_PWM2   0x2000
#define PWM_CTRL_REG_TRIGGER_ON_PWM3   0x3000
#define PWM_CTRL_REG_TRIGGER_ON_PWM4   0x4000
#define PWM_CTRL_REG_SELF_TRIGGER   0x7000
#define PWM_DMA_ENABLE   0x00000001
#define PWM_DMA_DISABLE   0x00000000
#define PWM_DMA_RESET   0x00000001
#define PWM_END_COUNT_CLKDIV_1_1MHZ   0x0020
#define PWM_THRESHHOLD_CLKDIV_1_1MHZ_DUTY_CYCLE_75   0x0018
#define PWM_THRESHHOLD_CLKDIV_1_1MHZ_DUTY_CYCLE_50   0x0010
#define PWM_THRESHHOLD_CLKDIV_1_1MHZ_DUTY_CYCLE_25   0x0008
#define PWM_END_COUNT_CLKDIV_1_500KHZ   0x0040
#define PWM_THRESHHOLD_CLKDIV_1_500KHZ_DUTY_CYCLE_75   0x0030
#define PWM_THRESHHOLD_CLKDIV_1_500KHZ_DUTY_CYCLE_50   0x0020
#define PWM_THRESHHOLD_CLKDIV_1_500KHZ_DUTY_CYCLE_25   0x0010
#define PWM_END_COUNT_CLKDIV_1_250KHZ   0x0080
#define PWM_THRESHHOLD_CLKDIV_1_250KHZ_DUTY_CYCLE_75   0x0060
#define PWM_THRESHHOLD_CLKDIV_1_250KHZ_DUTY_CYCLE_50   0x0040
#define PWM_THRESHHOLD_CLKDIV_1_250KHZ_DUTY_CYCLE_25   0x0020
#define MINIMUM_END_COUNT_VALUE   4
#define MAXIMUM_END_COUNT_VALUE   0x7FFF
#define MINIMUM_THRESHHOLD_VALUE   4
#define MAXIMUM_THRESHHOLD_VALUE   0x7FFF
#define DEFAULT_PWM_CONFIG
 PWM settings for regular sawtooth wave.

Enumerations

enum  tr_hal_pwm_id_t {
  PWM_0_ID = 0 ,
  PWM_1_ID = 1 ,
  PWM_2_ID = 2 ,
  PWM_3_ID = 3 ,
  PWM_4_ID = 4
}
enum  tr_hal_pwm_clk_div_t {
  TR_HAL_PWM_CLOCK_DIVIDER_1 = 1 ,
  TR_HAL_PWM_CLOCK_DIVIDER_2 = 2 ,
  TR_HAL_PWM_CLOCK_DIVIDER_4 = 3 ,
  TR_HAL_PWM_CLOCK_DIVIDER_8 = 4 ,
  TR_HAL_PWM_CLOCK_DIVIDER_16 = 5 ,
  TR_HAL_PWM_CLOCK_DIVIDER_32 = 6 ,
  TR_HAL_PWM_CLOCK_DIVIDER_64 = 7 ,
  TR_HAL_PWM_CLOCK_DIVIDER_128 = 8 ,
  TR_HAL_PWM_CLOCK_DIVIDER_256 = 9
}
enum  tr_hal_pwm_clk_select_t {
  TR_HAL_PWM_CLK_SELECT_PER_CLK = 0 ,
  TR_HAL_PWM_CLK_SELECT_DEFAULT = 0
}

Functions

PWM_REGISTERS_Ttr_hal_pwm_get_register_address (tr_hal_pwm_id_t pwm_id)

Detailed Description



Macro Definition Documentation

◆ CHIP_MEMORY_MAP_PWM0_BASE

#define CHIP_MEMORY_MAP_PWM0_BASE   (0xA0C00000UL)

chip register addresses section 3.1 of the data sheet explains the Memory map. this gives the base address for how to write the chip registers the chip registers are how the software interacts and configures the PWM peripherals. We create a struct below that addresses the individual registers. This makes it so we can use this base address and a struct field to read or write a chip register



◆ CHIP_MEMORY_MAP_PWM1_BASE

#define CHIP_MEMORY_MAP_PWM1_BASE   (0xA0C00100UL)

◆ CHIP_MEMORY_MAP_PWM2_BASE

#define CHIP_MEMORY_MAP_PWM2_BASE   (0xA0C00200UL)

◆ CHIP_MEMORY_MAP_PWM3_BASE

#define CHIP_MEMORY_MAP_PWM3_BASE   (0xA0C00300UL)

◆ CHIP_MEMORY_MAP_PWM4_BASE

#define CHIP_MEMORY_MAP_PWM4_BASE   (0xA0C00400UL)

◆ DEFAULT_PWM_CONFIG

#define DEFAULT_PWM_CONFIG
Value:
{ \
.pin_to_use = (tr_hal_gpio_pin_t) { PWM_DEFAULT_PIN }, \
.clock_to_use = TR_HAL_PWM_CLK_SELECT_DEFAULT, \
.clock_divider = TR_HAL_PWM_CLOCK_DIVIDER_1, \
}
#define PWM_END_COUNT_CLKDIV_1_500KHZ
Definition T32CM11_pwm.h:267
#define PWM_DEFAULT_PIN
Definition T32CM11_pwm.h:48
#define PWM_THRESHHOLD_CLKDIV_1_500KHZ_DUTY_CYCLE_75
Definition T32CM11_pwm.h:269
@ TR_HAL_PWM_CLK_SELECT_DEFAULT
Definition T32CM11_pwm.h:238
@ TR_HAL_PWM_CLOCK_DIVIDER_1
Definition T32CM11_pwm.h:219
pin type
Definition tr_hal_platform.h:23

PWM settings for regular sawtooth wave.


initializer macros for default PWM settings


◆ MAXIMUM_END_COUNT_VALUE

#define MAXIMUM_END_COUNT_VALUE   0x7FFF

◆ MAXIMUM_THRESHHOLD_VALUE

#define MAXIMUM_THRESHHOLD_VALUE   0x7FFF

◆ MINIMUM_END_COUNT_VALUE

#define MINIMUM_END_COUNT_VALUE   4

◆ MINIMUM_THRESHHOLD_VALUE

#define MINIMUM_THRESHHOLD_VALUE   4

◆ PWM0_REGISTERS

#define PWM0_REGISTERS   ((PWM_REGISTERS_T *) CHIP_MEMORY_MAP_PWM0_BASE)

◆ PWM1_REGISTERS

#define PWM1_REGISTERS   ((PWM_REGISTERS_T *) CHIP_MEMORY_MAP_PWM1_BASE)

◆ PWM2_REGISTERS

#define PWM2_REGISTERS   ((PWM_REGISTERS_T *) CHIP_MEMORY_MAP_PWM2_BASE)

◆ PWM3_REGISTERS

#define PWM3_REGISTERS   ((PWM_REGISTERS_T *) CHIP_MEMORY_MAP_PWM3_BASE)

◆ PWM4_REGISTERS

#define PWM4_REGISTERS   ((PWM_REGISTERS_T *) CHIP_MEMORY_MAP_PWM4_BASE)

◆ PWM_CLK_DIV_1

#define PWM_CLK_DIV_1   0x0000

◆ PWM_CLK_DIV_128

#define PWM_CLK_DIV_128   0x0700

◆ PWM_CLK_DIV_16

#define PWM_CLK_DIV_16   0x0400

◆ PWM_CLK_DIV_2

#define PWM_CLK_DIV_2   0x0100

◆ PWM_CLK_DIV_256

#define PWM_CLK_DIV_256   0x0800

◆ PWM_CLK_DIV_32

#define PWM_CLK_DIV_32   0x0500

◆ PWM_CLK_DIV_4

#define PWM_CLK_DIV_4   0x0200

◆ PWM_CLK_DIV_64

#define PWM_CLK_DIV_64   0x0600

◆ PWM_CLK_DIV_8

#define PWM_CLK_DIV_8   0x0300

◆ PWM_CLK_DIV_MASK

#define PWM_CLK_DIV_MASK   0x0F00

◆ PWM_CTRL_REG_AUTO_TRIGGER

#define PWM_CTRL_REG_AUTO_TRIGGER   0x40

◆ PWM_CTRL_REG_CONTINUOUS

#define PWM_CTRL_REG_CONTINUOUS   0x04

◆ PWM_CTRL_REG_DISABLE_CLK

#define PWM_CTRL_REG_DISABLE_CLK   0x00

◆ PWM_CTRL_REG_DISABLE_PWM

#define PWM_CTRL_REG_DISABLE_PWM   0x00

◆ PWM_CTRL_REG_DMA_FORMAT_0

#define PWM_CTRL_REG_DMA_FORMAT_0   0x00

◆ PWM_CTRL_REG_DMA_FORMAT_1

#define PWM_CTRL_REG_DMA_FORMAT_1   0x08

◆ PWM_CTRL_REG_DOWN_AND_UP_COUNTER

#define PWM_CTRL_REG_DOWN_AND_UP_COUNTER   0x10

◆ PWM_CTRL_REG_ENABLE_CLK

#define PWM_CTRL_REG_ENABLE_CLK   0x02

◆ PWM_CTRL_REG_ENABLE_PWM

#define PWM_CTRL_REG_ENABLE_PWM   0x01

◆ PWM_CTRL_REG_NO_AUTO_TRIGGER

#define PWM_CTRL_REG_NO_AUTO_TRIGGER   0x00

◆ PWM_CTRL_REG_NON_CONTINUOUS

#define PWM_CTRL_REG_NON_CONTINUOUS   0x00

◆ PWM_CTRL_REG_ONE_SEQUENCE

#define PWM_CTRL_REG_ONE_SEQUENCE   0x00

◆ PWM_CTRL_REG_RESET

#define PWM_CTRL_REG_RESET   0x01

◆ PWM_CTRL_REG_RSEQ_FIRST

#define PWM_CTRL_REG_RSEQ_FIRST   0x00

◆ PWM_CTRL_REG_SELF_TRIGGER

#define PWM_CTRL_REG_SELF_TRIGGER   0x7000

◆ PWM_CTRL_REG_TRIGGER_ON_ENABLE

#define PWM_CTRL_REG_TRIGGER_ON_ENABLE   0x00

◆ PWM_CTRL_REG_TRIGGER_ON_FIFO

#define PWM_CTRL_REG_TRIGGER_ON_FIFO   0x20

◆ PWM_CTRL_REG_TRIGGER_ON_PWM0

#define PWM_CTRL_REG_TRIGGER_ON_PWM0   0x0000

◆ PWM_CTRL_REG_TRIGGER_ON_PWM1

#define PWM_CTRL_REG_TRIGGER_ON_PWM1   0x1000

◆ PWM_CTRL_REG_TRIGGER_ON_PWM2

#define PWM_CTRL_REG_TRIGGER_ON_PWM2   0x2000

◆ PWM_CTRL_REG_TRIGGER_ON_PWM3

#define PWM_CTRL_REG_TRIGGER_ON_PWM3   0x3000

◆ PWM_CTRL_REG_TRIGGER_ON_PWM4

#define PWM_CTRL_REG_TRIGGER_ON_PWM4   0x4000

◆ PWM_CTRL_REG_TSEQ_FIRST

#define PWM_CTRL_REG_TSEQ_FIRST   0x01

◆ PWM_CTRL_REG_TWO_SEQUENCE

#define PWM_CTRL_REG_TWO_SEQUENCE   0x02

◆ PWM_CTRL_REG_UP_COUNTER

#define PWM_CTRL_REG_UP_COUNTER   0x00

◆ PWM_DEFAULT_PIN

#define PWM_DEFAULT_PIN   20

valid pins for PWM PWM0: 8, 20, 21, 22, 23 PWM1: 9, 20, 21, 22, 23 PWM2: 14, 20, 21, 22, 23 PWM3: 15, 20, 21, 22, 23 PWM4: 20, 21, 22, 23


◆ PWM_DMA_DISABLE

#define PWM_DMA_DISABLE   0x00000000

◆ PWM_DMA_ENABLE

#define PWM_DMA_ENABLE   0x00000001

◆ PWM_DMA_RESET

#define PWM_DMA_RESET   0x00000001

◆ PWM_END_COUNT_CLKDIV_1_1MHZ

#define PWM_END_COUNT_CLKDIV_1_1MHZ   0x0020

below are some examples that show how to setup the clock divider, threshold, and end count fields of the PWM settings struct to get the desired PWM waveform



defines for 1 MHz signals, duty cycle of 25%, 50%, 75% these work when the clock divisor is 1


◆ PWM_END_COUNT_CLKDIV_1_250KHZ

#define PWM_END_COUNT_CLKDIV_1_250KHZ   0x0080

defines for 250 KHz signals, duty cycle of 25%, 50%, 75% these work when the clock divisor is 1


◆ PWM_END_COUNT_CLKDIV_1_500KHZ

#define PWM_END_COUNT_CLKDIV_1_500KHZ   0x0040

defines for 500 KHz signals, duty cycle of 25%, 50%, 75% these work when the clock divisor is 1


◆ PWM_THRESHHOLD_CLKDIV_1_1MHZ_DUTY_CYCLE_25

#define PWM_THRESHHOLD_CLKDIV_1_1MHZ_DUTY_CYCLE_25   0x0008

◆ PWM_THRESHHOLD_CLKDIV_1_1MHZ_DUTY_CYCLE_50

#define PWM_THRESHHOLD_CLKDIV_1_1MHZ_DUTY_CYCLE_50   0x0010

◆ PWM_THRESHHOLD_CLKDIV_1_1MHZ_DUTY_CYCLE_75

#define PWM_THRESHHOLD_CLKDIV_1_1MHZ_DUTY_CYCLE_75   0x0018

◆ PWM_THRESHHOLD_CLKDIV_1_250KHZ_DUTY_CYCLE_25

#define PWM_THRESHHOLD_CLKDIV_1_250KHZ_DUTY_CYCLE_25   0x0020

◆ PWM_THRESHHOLD_CLKDIV_1_250KHZ_DUTY_CYCLE_50

#define PWM_THRESHHOLD_CLKDIV_1_250KHZ_DUTY_CYCLE_50   0x0040

◆ PWM_THRESHHOLD_CLKDIV_1_250KHZ_DUTY_CYCLE_75

#define PWM_THRESHHOLD_CLKDIV_1_250KHZ_DUTY_CYCLE_75   0x0060

◆ PWM_THRESHHOLD_CLKDIV_1_500KHZ_DUTY_CYCLE_25

#define PWM_THRESHHOLD_CLKDIV_1_500KHZ_DUTY_CYCLE_25   0x0010

◆ PWM_THRESHHOLD_CLKDIV_1_500KHZ_DUTY_CYCLE_50

#define PWM_THRESHHOLD_CLKDIV_1_500KHZ_DUTY_CYCLE_50   0x0020

◆ PWM_THRESHHOLD_CLKDIV_1_500KHZ_DUTY_CYCLE_75

#define PWM_THRESHHOLD_CLKDIV_1_500KHZ_DUTY_CYCLE_75   0x0030

◆ TR_HAL_NUM_PWM

#define TR_HAL_NUM_PWM   5

Enumeration Type Documentation

◆ tr_hal_pwm_clk_div_t


enum for valid clock divider values


Enumerator
TR_HAL_PWM_CLOCK_DIVIDER_1 
TR_HAL_PWM_CLOCK_DIVIDER_2 
TR_HAL_PWM_CLOCK_DIVIDER_4 
TR_HAL_PWM_CLOCK_DIVIDER_8 
TR_HAL_PWM_CLOCK_DIVIDER_16 
TR_HAL_PWM_CLOCK_DIVIDER_32 
TR_HAL_PWM_CLOCK_DIVIDER_64 
TR_HAL_PWM_CLOCK_DIVIDER_128 
TR_HAL_PWM_CLOCK_DIVIDER_256 

◆ tr_hal_pwm_clk_select_t


the PWM on the CM11 only has 1 choice of source clock


Enumerator
TR_HAL_PWM_CLK_SELECT_PER_CLK 
TR_HAL_PWM_CLK_SELECT_DEFAULT 

◆ tr_hal_pwm_id_t

Enumerator
PWM_0_ID 
PWM_1_ID 
PWM_2_ID 
PWM_3_ID 
PWM_4_ID 

Function Documentation

◆ tr_hal_pwm_get_register_address()

PWM_REGISTERS_T * tr_hal_pwm_get_register_address ( tr_hal_pwm_id_t pwm_id)

if the app wants to directly interface with the chip registers, this is a convenience function for getting the address/struct of a particular PWM so the chip registers can be accessed.