40 #include <sys/types.h>
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
66 #define PWM0_BASE 0x48300000
68 #define PWM1_BASE 0x48302000
70 #define PWM2_BASE 0x48304000
73 #define PWMSS_OFFSET 0x0000
75 #define ECAP_OFFSET 0x0100
77 #define EQEP_OFFSET 0x0180
79 #define EPWM_OFFSET 0x0200
82 #define PWM_SIZE 0x0260
84 #define PWMSS_SIZE 0x0100
86 #define ECAP_SIZE 0x0080
88 #define EQEP_SIZE 0x0080
90 #define EPWM_SIZE 0x0060
95 #define PWMSS0_BASE (PWM0_BASE + PWMSS_OFFSET)
97 #define PWMSS1_BASE (PWM1_BASE + PWMSS_OFFSET)
99 #define PWMSS2_BASE (PWM2_BASE + PWMSS_OFFSET)
103 #define EPWM0_BASE (PWM0_BASE + EPWM_OFFSET)
105 #define EPWM1_BASE (PWM1_BASE + EPWM_OFFSET)
107 #define EPWM2_BASE (PWM2_BASE + EPWM_OFFSET)
111 #define PWMSS_IDVER_OFFSET 0x00
113 #define PWMSS_SYSCONFIG_OFFSET 0x04
115 #define PWMSS_CLKCONFIG_OFFSET 0x08
117 #define PWMSS_CLKSTATUS_OFFSET 0x0C
121 #define EPWM_TBCTL_OFFSET 0x00
123 #define EPWM_TBSTS_OFFSET 0x02
125 #define EPWM_TBPHS_OFFSET 0x06
127 #define EPWM_TBCNT_OFFSET 0x08
129 #define EPWM_TBPRD_OFFSET 0x0A
131 #define EPWM_CMPCTL_OFFSET 0x0E
133 #define EPWM_CMPA_OFFSET 0x12
135 #define EPWM_CMPB_OFFSET 0x14
137 #define EPWM_AQCTLA_OFFSET 0x16
139 #define EPWM_AQCTLB_OFFSET 0x18
146 volatile uint8_t
const *cm_per_mem = NULL;
148 volatile uint8_t
const *control_mem = NULL;
150 volatile uint8_t
const *pwm0_mem = NULL;
152 volatile uint8_t
const *pwm1_mem = NULL;
155 mem_fd = open(
"/dev/mem", O_RDWR | O_SYNC);
161 cm_per_mem = (
volatile uint8_t
const *)mmap(0,
CM_PER_SIZE, PROT_READ | PROT_WRITE,
163 if ((
void *)cm_per_mem == MAP_FAILED) {
168 control_mem = (
volatile uint8_t
const *)mmap(0,
CONTROL_SIZE, PROT_READ | PROT_WRITE,
170 if ((
void *)cm_per_mem == MAP_FAILED) {
175 pwm0_mem = (
volatile uint8_t
const *)mmap(0,
PWM_SIZE, PROT_READ | PROT_WRITE,
177 if ((
void *)pwm0_mem == MAP_FAILED) {
182 pwm1_mem = (
volatile uint8_t
const *)mmap(0,
PWM_SIZE, PROT_READ | PROT_WRITE,
184 if ((
void *)pwm1_mem == MAP_FAILED) {
191 volatile uint32_t
const *cm_per_l4ls_clkstctrl =
193 volatile uint32_t
const *cm_per_l4ls_clkctrl =
195 volatile uint32_t
const *cm_per_epwmss0_clkctrl =
197 volatile uint32_t
const *cm_per_epwmss1_clkctrl =
199 volatile uint32_t
const *cm_per_epwmss2_clkctrl =
201 volatile uint32_t
const *cm_per_pru_icss_clkctrl =
204 printf(
"CM_PER registers:\n");
205 printf(
" L4LS_CLKSTCTRL: \t0x%08x\n", *cm_per_l4ls_clkstctrl);
206 printf(
" L4LS_CLKCTRL: \t0x%08x\n", *cm_per_l4ls_clkctrl);
207 printf(
" EPWMSS0_CLKCTRL: \t0x%08x\n", *cm_per_epwmss0_clkctrl);
208 printf(
" EPWMSS1_CLKCTRL: \t0x%08x\n", *cm_per_epwmss1_clkctrl);
209 printf(
" EPWMSS2_CLKCTRL: \t0x%08x\n", *cm_per_epwmss2_clkctrl);
210 printf(
" PRU_ICSS_CLKCTRL:\t0x%08x\n", *cm_per_pru_icss_clkctrl);
213 volatile uint32_t
const *control_pwmss_ctrl =
216 printf(
"CONTROL registers:\n");
217 printf(
" PWMSS_CTRL: \t0x%08x\n", *control_pwmss_ctrl);
220 volatile uint32_t
const *pwmss0_sysconfig =
222 volatile uint32_t
const *pwmss0_clkconfig =
224 volatile uint32_t
const *pwmss0_clkstatus =
227 volatile uint16_t
const *epwm0_tbctl =
229 volatile uint16_t
const *epwm0_tbcnt =
231 volatile uint16_t
const *epwm0_tbprd =
233 volatile uint16_t
const *epwm0_cmpa =
235 volatile uint16_t
const *epwm0_cmpb =
237 volatile uint16_t
const *epwm0_aqctla =
239 volatile uint16_t
const *epwm0_aqctlb =
242 printf(
"PWMSS0 registers:\n");
243 printf(
" SYSCONFIG: \t0x%08x\n", *pwmss0_sysconfig);
244 printf(
" CLKCONFIG: \t0x%08x\n", *pwmss0_clkconfig);
245 printf(
" CLKSTATUS: \t0x%08x\n", *pwmss0_clkstatus);
246 printf(
" ePWM0 registers:\n");
247 printf(
" TBCTL: \t0x%04x\n", *epwm0_tbctl);
248 printf(
" TBCNT: \t0x%04x\n", *epwm0_tbcnt);
249 printf(
" TBPRD: \t0x%04x\n", *epwm0_tbprd);
250 printf(
" CMPA: \t0x%04x\n", *epwm0_cmpa);
251 printf(
" CMPB: \t0x%04x\n", *epwm0_cmpb);
252 printf(
" AQCTLA:\t0x%04x\n", *epwm0_aqctla);
253 printf(
" AQCTLB:\t0x%04x\n", *epwm0_aqctlb);
256 volatile uint32_t
const *pwmss1_sysconfig =
258 volatile uint32_t
const *pwmss1_clkconfig =
260 volatile uint32_t
const *pwmss1_clkstatus =
263 volatile uint16_t
const *epwm1_tbctl =
265 volatile uint16_t
const *epwm1_tbcnt =
267 volatile uint16_t
const *epwm1_tbprd =
269 volatile uint16_t
const *epwm1_cmpa =
271 volatile uint16_t
const *epwm1_cmpb =
273 volatile uint16_t
const *epwm1_aqctla =
275 volatile uint16_t
const *epwm1_aqctlb =
278 printf(
"PWMSS1 registers:\n");
279 printf(
" SYSCONFIG: \t0x%08x\n", *pwmss1_sysconfig);
280 printf(
" CLKCONFIG: \t0x%08x\n", *pwmss1_clkconfig);
281 printf(
" CLKSTATUS: \t0x%08x\n", *pwmss1_clkstatus);
282 printf(
" ePWM1 registers:\n");
283 printf(
" TBCTL: \t0x%04x\n", *epwm1_tbctl);
284 printf(
" TBCNT: \t0x%04x\n", *epwm1_tbcnt);
285 printf(
" TBPRD: \t0x%04x\n", *epwm1_tbprd);
286 printf(
" CMPA: \t0x%04x\n", *epwm1_cmpa);
287 printf(
" CMPB: \t0x%04x\n", *epwm1_cmpb);
288 printf(
" AQCTLA:\t0x%04x\n", *epwm1_aqctla);
289 printf(
" AQCTLB:\t0x%04x\n", *epwm1_aqctlb);
292 if (cm_per_mem != NULL) {
296 if (control_mem != NULL) {
300 if (pwm0_mem != NULL) {
304 if (pwm1_mem != NULL) {
#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 L4LS_CLKSTCTRL_OFFSET
#define PWM1_BASE
PWM1 register base address.
#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 EPWM_CMPB_OFFSET
Counter-Compare B Register.
int main()
Program main fuction.
#define PWMSS_CLKCONFIG_OFFSET
Clock Configuration Register.
#define L4LS_CLKCTRL_OFFSET
#define PWMSS_CLKSTATUS_OFFSET
Clock Status Register.
#define EPWM_OFFSET
ePWM module register offset
#define PWM0_BASE
PWM0 register base address.