46#define CM_PER_BASE 0x44E00000
47#define CM_PER_SIZE 0x0400
49#define L4LS_CLKSTCTRL_OFFSET 0x00
50#define L4LS_CLKCTRL_OFFSET 0x60
51#define EPWMSS1_CLKCTRL_OFFSET 0xCC
52#define EPWMSS0_CLKCTRL_OFFSET 0xD4
53#define EPWMSS2_CLKCTRL_OFFSET 0xD8
54#define PRU_ICSS_CLKCTRL_OFFSET 0xE8
59#define CONTROL_BASE 0x44E10000
60#define CONTROL_SIZE 0x20000
62#define PWMSS_CTRL_OFFSET 0x664
63#define CONF_GMPC_AD14_OFFSET 0x838
64#define CONF_GMPC_AD15_OFFSET 0x83C
65#define CONF_GMPC_A2_OFFSET 0x848
66#define CONF_GMPC_A3_OFFSET 0x84C
67#define CONF_SPI0_SCLK_OFFSET 0x950
71#define PWM0_BASE 0x48300000
73#define PWM1_BASE 0x48302000
75#define PWM2_BASE 0x48304000
78#define PWMSS_OFFSET 0x0000
80#define ECAP_OFFSET 0x0100
82#define EQEP_OFFSET 0x0180
84#define EPWM_OFFSET 0x0200
87#define PWM_SIZE 0x0260
89#define PWMSS_SIZE 0x0100
91#define ECAP_SIZE 0x0080
93#define EQEP_SIZE 0x0080
95#define EPWM_SIZE 0x0060
100#define PWMSS0_BASE (PWM0_BASE + PWMSS_OFFSET)
102#define PWMSS1_BASE (PWM1_BASE + PWMSS_OFFSET)
104#define PWMSS2_BASE (PWM2_BASE + PWMSS_OFFSET)
108#define EPWM0_BASE (PWM0_BASE + EPWM_OFFSET)
110#define EPWM1_BASE (PWM1_BASE + EPWM_OFFSET)
112#define EPWM2_BASE (PWM2_BASE + EPWM_OFFSET)
116#define PWMSS_IDVER_OFFSET 0x00
118#define PWMSS_SYSCONFIG_OFFSET 0x04
120#define PWMSS_CLKCONFIG_OFFSET 0x08
122#define PWMSS_CLKSTATUS_OFFSET 0x0C
126#define EPWM_TBCTL_OFFSET 0x00
128#define EPWM_TBSTS_OFFSET 0x02
130#define EPWM_TBPHS_OFFSET 0x06
132#define EPWM_TBCNT_OFFSET 0x08
134#define EPWM_TBPRD_OFFSET 0x0A
136#define EPWM_CMPCTL_OFFSET 0x0E
138#define EPWM_CMPA_OFFSET 0x12
140#define EPWM_CMPB_OFFSET 0x14
142#define EPWM_AQCTLA_OFFSET 0x16
144#define EPWM_AQCTLB_OFFSET 0x18
151 volatile uint8_t
const *cm_per_mem = NULL;
153 volatile uint8_t
const *control_mem = NULL;
155 volatile uint8_t
const *pwm0_mem = NULL;
157 volatile uint8_t
const *pwm1_mem = NULL;
160 mem_fd = open(
"/dev/mem", O_RDWR | O_SYNC);
166 cm_per_mem = (
volatile uint8_t
const *)mmap(0,
CM_PER_SIZE, PROT_READ | PROT_WRITE,
168 if ((
void *)cm_per_mem == MAP_FAILED) {
173 control_mem = (
volatile uint8_t
const *)mmap(0,
CONTROL_SIZE, PROT_READ | PROT_WRITE,
175 if ((
void *)control_mem == MAP_FAILED) {
180 pwm0_mem = (
volatile uint8_t
const *)mmap(0,
PWM_SIZE, PROT_READ | PROT_WRITE,
182 if ((
void *)pwm0_mem == MAP_FAILED) {
187 pwm1_mem = (
volatile uint8_t
const *)mmap(0,
PWM_SIZE, PROT_READ | PROT_WRITE,
189 if ((
void *)pwm1_mem == MAP_FAILED) {
196 volatile uint32_t
const *cm_per_l4ls_clkstctrl =
198 volatile uint32_t
const *cm_per_l4ls_clkctrl =
200 volatile uint32_t
const *cm_per_epwmss0_clkctrl =
202 volatile uint32_t
const *cm_per_epwmss1_clkctrl =
204 volatile uint32_t
const *cm_per_epwmss2_clkctrl =
206 volatile uint32_t
const *cm_per_pru_icss_clkctrl =
209 printf(
"CM_PER registers:\n");
210 printf(
" L4LS_CLKSTCTRL: \t0x%08x\n", *cm_per_l4ls_clkstctrl);
211 printf(
" L4LS_CLKCTRL: \t0x%08x\n", *cm_per_l4ls_clkctrl);
212 printf(
" EPWMSS0_CLKCTRL: \t0x%08x\n", *cm_per_epwmss0_clkctrl);
213 printf(
" EPWMSS1_CLKCTRL: \t0x%08x\n", *cm_per_epwmss1_clkctrl);
214 printf(
" EPWMSS2_CLKCTRL: \t0x%08x\n", *cm_per_epwmss2_clkctrl);
215 printf(
" PRU_ICSS_CLKCTRL:\t0x%08x\n", *cm_per_pru_icss_clkctrl);
218 volatile uint32_t
const *control_pwmss_ctrl =
220 volatile uint32_t
const *control_conf_gpmc_ad14 =
222 volatile uint32_t
const *control_conf_gpmc_ad15 =
224 volatile uint32_t
const *control_conf_gpmc_a2 =
226 volatile uint32_t
const *control_conf_gpmc_a3 =
228 volatile uint32_t
const *control_conf_spi0_sclk =
231 printf(
"CONTROL registers:\n");
232 printf(
" PWMSS_CTRL: \t0x%08x\n", *control_pwmss_ctrl);
233 printf(
" CONF_GMPC_AD14:\t0x%08x (ADC1 nDR)\n", *control_conf_gpmc_ad14);
234 printf(
" CONF_GMPC_AD15:\t0x%08x (ADC0 nDR)\n", *control_conf_gpmc_ad15);
235 printf(
" CONF_GMPC_A2: \t0x%08x (LATCH A reset)\n", *control_conf_gpmc_a2);
236 printf(
" CONF_GMPC_A3: \t0x%08x (LATCH B reset)\n", *control_conf_gpmc_a3);
237 printf(
" CONF_SPI0_SCLK:\t0x%08x (ADC clock)\n", *control_conf_spi0_sclk);
240 volatile uint32_t
const *pwmss0_sysconfig =
242 volatile uint32_t
const *pwmss0_clkconfig =
244 volatile uint32_t
const *pwmss0_clkstatus =
247 volatile uint16_t
const *epwm0_tbctl =
249 volatile uint16_t
const *epwm0_tbcnt =
251 volatile uint16_t
const *epwm0_tbprd =
253 volatile uint16_t
const *epwm0_cmpa =
255 volatile uint16_t
const *epwm0_cmpb =
257 volatile uint16_t
const *epwm0_aqctla =
259 volatile uint16_t
const *epwm0_aqctlb =
262 printf(
"PWMSS0 registers:\n");
263 printf(
" SYSCONFIG: \t0x%08x\n", *pwmss0_sysconfig);
264 printf(
" CLKCONFIG: \t0x%08x\n", *pwmss0_clkconfig);
265 printf(
" CLKSTATUS: \t0x%08x\n", *pwmss0_clkstatus);
266 printf(
" ePWM0 registers:\n");
267 printf(
" TBCTL: \t0x%04x\n", *epwm0_tbctl);
268 printf(
" TBCNT: \t0x%04x\n", *epwm0_tbcnt);
269 printf(
" TBPRD: \t0x%04x\n", *epwm0_tbprd);
270 printf(
" CMPA: \t0x%04x\n", *epwm0_cmpa);
271 printf(
" CMPB: \t0x%04x\n", *epwm0_cmpb);
272 printf(
" AQCTLA:\t0x%04x\n", *epwm0_aqctla);
273 printf(
" AQCTLB:\t0x%04x\n", *epwm0_aqctlb);
276 volatile uint32_t
const *pwmss1_sysconfig =
278 volatile uint32_t
const *pwmss1_clkconfig =
280 volatile uint32_t
const *pwmss1_clkstatus =
283 volatile uint16_t
const *epwm1_tbctl =
285 volatile uint16_t
const *epwm1_tbcnt =
287 volatile uint16_t
const *epwm1_tbprd =
289 volatile uint16_t
const *epwm1_cmpa =
291 volatile uint16_t
const *epwm1_cmpb =
293 volatile uint16_t
const *epwm1_aqctla =
295 volatile uint16_t
const *epwm1_aqctlb =
298 printf(
"PWMSS1 registers:\n");
299 printf(
" SYSCONFIG: \t0x%08x\n", *pwmss1_sysconfig);
300 printf(
" CLKCONFIG: \t0x%08x\n", *pwmss1_clkconfig);
301 printf(
" CLKSTATUS: \t0x%08x\n", *pwmss1_clkstatus);
302 printf(
" ePWM1 registers:\n");
303 printf(
" TBCTL: \t0x%04x\n", *epwm1_tbctl);
304 printf(
" TBCNT: \t0x%04x\n", *epwm1_tbcnt);
305 printf(
" TBPRD: \t0x%04x\n", *epwm1_tbprd);
306 printf(
" CMPA: \t0x%04x\n", *epwm1_cmpa);
307 printf(
" CMPB: \t0x%04x\n", *epwm1_cmpb);
308 printf(
" AQCTLA:\t0x%04x\n", *epwm1_aqctla);
309 printf(
" AQCTLB:\t0x%04x\n", *epwm1_aqctlb);
312 if (cm_per_mem != NULL) {
316 if (control_mem != NULL) {
320 if (pwm0_mem != NULL) {
324 if (pwm1_mem != NULL) {
#define CONF_SPI0_SCLK_OFFSET
#define EPWM_TBCTL_OFFSET
Time-Base Control Register.
#define EPWM_AQCTLB_OFFSET
Action-Qualifier Control Register for Output B (EPWMxB)
#define PRU_ICSS_CLKCTRL_OFFSET
#define EPWMSS2_CLKCTRL_OFFSET
#define EPWM_TBCNT_OFFSET
Time-Base Counter Register.
#define CONTROL_BASE
CONTROL register base address.
#define EPWMSS0_CLKCTRL_OFFSET
#define PWMSS_OFFSET
PWMSS module register offset.
#define CONF_GMPC_AD14_OFFSET
#define L4LS_CLKSTCTRL_OFFSET
#define PWM1_BASE
PWM1 register base address.
#define CONF_GMPC_A2_OFFSET
#define PWM_SIZE
PWM module register map size.
#define EPWMSS1_CLKCTRL_OFFSET
#define EPWM_AQCTLA_OFFSET
Action-Qualifier Control Register for Output A (EPWMxA)
#define EPWM_CMPA_OFFSET
Counter-Compare A Register.
#define CM_PER_BASE
CM_PER register base address.
#define PWMSS_SYSCONFIG_OFFSET
System Configuration Register.
#define EPWM_TBPRD_OFFSET
Time-Base Period Register.
#define PWMSS_CTRL_OFFSET
#define CONF_GMPC_A3_OFFSET
#define EPWM_CMPB_OFFSET
Counter-Compare B Register.
int main()
Program main fuction.
#define PWMSS_CLKCONFIG_OFFSET
Clock Configuration Register.
#define L4LS_CLKCTRL_OFFSET
#define CONF_GMPC_AD15_OFFSET
#define PWMSS_CLKSTATUS_OFFSET
Clock Status Register.
#define EPWM_OFFSET
ePWM module register offset
#define PWM0_BASE
PWM0 register base address.