之前做的项目,现在没用了给大家共享下
PRU 代码:
.origin 0
.entrypoint START
#define DATA_ON_DLY 80
#define DATA_OFF_DLY 80
#define CLK_ON_DLY 160
#define CLK_OFF_DLY 160
#define CSLD_ON_DLY 400
#define CSLD_OFF_DLY 80
#define MAIN_LOOP 24
#define DATA_ADDR 0x00000000
START:
MOV r2, DATA_ON_DLY
MOV r1, CLK_ON_DLY
MOV r3, CSLD_ON_DLY
MOV r4, MAIN_LOOP
MOV r5, DATA_ADDR // copy address
MOV r6, 0
CSLD_ON:
SET r30.t0
MOV r4, MAIN_LOOP
MOV r6, 0
MOV r7, 0
MOV r8, 0
LBBO r6, r5, 0, 4
MOV r7, 63<<16
OR r8, r7, r6.w0
CSLD_ON_DELAY:
SUB r3,r3,1
QBNE CSLD_ON_DELAY, r3, 0
MOV r3, CSLD_OFF_DLY
CSLD_OFF:
CLR r30.t0
CSLD_OFF_DELAY:
SUB r3,r3,1
QBNE CSLD_OFF_DELAY, r3,0
MOV r3, CSLD_ON_DLY
CHECK_DATA_BIT:
QBBS DATA_PULL_UP, r8.t23
QBBC DATA_PULL_DOWN, r8.t23
DATA_PULL_UP:
SET r30.t2
QBA DATA_ON_DELAY
DATA_PULL_DOWN:
CLR r30.t2
QBA DATA_ON_DELAY
DATA_ON_DELAY:
SUB r2,r2,1
QBNE DATA_ON_DELAY, r2,0
MOV r2, DATA_ON_DLY
CLK_ON:
SET r30.t4
CLK_ON_DELAY:
SUB r1, r1, 1
QBNE CLK_ON_DELAY,r1,0
MOV r1, CLK_ON_DLY
DATA_OFF:
CLR r30.t2
CLK_OFF:
CLR r30.t4
CLK_OFF_DELAY:
SUB r1,r1,1
QBNE CLK_OFF_DELAY, r1, 0
MOV r1, CLK_OFF_DLY
LOOP:
SUB r4,r4,1
LSL r8, r8, 1
QBNE CHECK_DATA_BIT, r4,0
QBA CSLD_ON
___________________________________________
Device tree overlay:
/ {
compatible = "ti,beaglebone", "ti,beaglebone-black";
/* identification */
part-number = "BB-BONE-SAM2";
version = "00A0";
/* state the resources this cape uses */
exclusive-use =
/* the pin header uses */
"P9.42", /* pru0: pr1_pru0_pru_r30_4 */
"P9.30", /* pru0: pr1_pru0_pru_r30_2 */
"P9.31", /* pru0: pr1_pru0_pru_r30_0 */
/* the hardware IP uses */
"pru0",
"pru1";
fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {
pru_pru_pins: pinmux_pru_pru_pins {
pinctrl-single,pins = <
0x1a0 0x25 /* mcasp0_aclkr.pr1_pru0_pru_r30_4, MODE5 | OUTPUT | PRU */
0x198 0x25 /* mcasp0_axr0.pr1_pru0_pru_r30_2, MODE5 | OUTPUT | PRU */
0x190 0x25 /* mcasp0_aclkx.pr1_pru0_pru_r30_0, MODE5 | OUTPUT | PRU */
>;
};
};
};
fragment@2 {
target = <&pruss>;
__overlay__ {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pru_pru_pins>;
};
};
};
PRU 代码:
.origin 0
.entrypoint START
#define DATA_ON_DLY 80
#define DATA_OFF_DLY 80
#define CLK_ON_DLY 160
#define CLK_OFF_DLY 160
#define CSLD_ON_DLY 400
#define CSLD_OFF_DLY 80
#define MAIN_LOOP 24
#define DATA_ADDR 0x00000000
START:
MOV r2, DATA_ON_DLY
MOV r1, CLK_ON_DLY
MOV r3, CSLD_ON_DLY
MOV r4, MAIN_LOOP
MOV r5, DATA_ADDR // copy address
MOV r6, 0
CSLD_ON:
SET r30.t0
MOV r4, MAIN_LOOP
MOV r6, 0
MOV r7, 0
MOV r8, 0
LBBO r6, r5, 0, 4
MOV r7, 63<<16
OR r8, r7, r6.w0
CSLD_ON_DELAY:
SUB r3,r3,1
QBNE CSLD_ON_DELAY, r3, 0
MOV r3, CSLD_OFF_DLY
CSLD_OFF:
CLR r30.t0
CSLD_OFF_DELAY:
SUB r3,r3,1
QBNE CSLD_OFF_DELAY, r3,0
MOV r3, CSLD_ON_DLY
CHECK_DATA_BIT:
QBBS DATA_PULL_UP, r8.t23
QBBC DATA_PULL_DOWN, r8.t23
DATA_PULL_UP:
SET r30.t2
QBA DATA_ON_DELAY
DATA_PULL_DOWN:
CLR r30.t2
QBA DATA_ON_DELAY
DATA_ON_DELAY:
SUB r2,r2,1
QBNE DATA_ON_DELAY, r2,0
MOV r2, DATA_ON_DLY
CLK_ON:
SET r30.t4
CLK_ON_DELAY:
SUB r1, r1, 1
QBNE CLK_ON_DELAY,r1,0
MOV r1, CLK_ON_DLY
DATA_OFF:
CLR r30.t2
CLK_OFF:
CLR r30.t4
CLK_OFF_DELAY:
SUB r1,r1,1
QBNE CLK_OFF_DELAY, r1, 0
MOV r1, CLK_OFF_DLY
LOOP:
SUB r4,r4,1
LSL r8, r8, 1
QBNE CHECK_DATA_BIT, r4,0
QBA CSLD_ON
___________________________________________
Device tree overlay:
/ {
compatible = "ti,beaglebone", "ti,beaglebone-black";
/* identification */
part-number = "BB-BONE-SAM2";
version = "00A0";
/* state the resources this cape uses */
exclusive-use =
/* the pin header uses */
"P9.42", /* pru0: pr1_pru0_pru_r30_4 */
"P9.30", /* pru0: pr1_pru0_pru_r30_2 */
"P9.31", /* pru0: pr1_pru0_pru_r30_0 */
/* the hardware IP uses */
"pru0",
"pru1";
fragment@0 {
target = <&am33xx_pinmux>;
__overlay__ {
pru_pru_pins: pinmux_pru_pru_pins {
pinctrl-single,pins = <
0x1a0 0x25 /* mcasp0_aclkr.pr1_pru0_pru_r30_4, MODE5 | OUTPUT | PRU */
0x198 0x25 /* mcasp0_axr0.pr1_pru0_pru_r30_2, MODE5 | OUTPUT | PRU */
0x190 0x25 /* mcasp0_aclkx.pr1_pru0_pru_r30_0, MODE5 | OUTPUT | PRU */
>;
};
};
};
fragment@2 {
target = <&pruss>;
__overlay__ {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pru_pru_pins>;
};
};
};
