1、sensor外部触发曝光

2、lpwm软件触发
软件触发: trigger_mode = 0 ,代表内部软件触发,配置软件触发后, LPWM 驱动将自动提供基于 hrtimer 的周期为 1s 软件 trigger。本质就是 1s 去写一个 LPWM 寄存器 (LPWM_SW_TRIG),让 LPWM 重新按照配置输出方波。


lpwm属性配置
c
.lpwm_attr = {
.enable = 1,
.lpwm_chn_attr = {
{ .trigger_source = 0,
.trigger_mode = 0,
.period = 33333,
.offset = 10,
.duty_time = 100,
.threshold = 0,
.adjust_step = 0,
},
{ .trigger_source = 0,
.trigger_mode = 0,
.period = 33333,
.offset = 10,
.duty_time = 100,
.threshold = 0,
.adjust_step = 0,
},
{ .trigger_source = 0,
.trigger_mode = 0,
.period = 33333,
.offset = 10,
.duty_time = 100,
.threshold = 0,
.adjust_step = 0,
},
{ .trigger_source = 0,
.trigger_mode = 0,
.period = 33333,
.offset = 10,
.duty_time = 100,
.threshold = 0,
.adjust_step = 0,
},
},
},
3、lpwm硬件触发
硬件触发: trigger_mode = 1 ,代表代表外部触发,需要外接 一个 PPS (pulse per second) 信号, LPWM 收到 PPS 信号后,硬件会按照软件的配置,输出方波。每收到一个 PPS 信号, LPWM 都会按照配置,重新出波。
检测 pps 信号这里有两种硬件方案,一种是 GPIO 中断,一种配置引脚 Time_Sync 功能
3.1 Time_Sync方案

PWM模拟pps信号,周期为1s

c
&pwm2 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm2_0 &pinctrl_pwm2_1>;
};
c
cd /sys/class/pwm/pwmchip0
echo 1 > export
cd pwm1/
echo 1000000000 > period #1s
echo 500000000 > duty_cycle #50%
echo 1 > enable

复用TIME_SYNC1 引脚,作为pps信号输入脚
c
&lsio_iomuxc {
gps_pps_func: gps_pps_func {
horizon,pins = <
LSIO_I2C1_SCL LSIO_PINMUX_2 BIT_OFFSET20 MUX_ALT2 &pconf_input_en_3v3
>;
};
};
c
&hobot_pps {
pinctrl-names = "default";
pinctrl-0 = <&gps_pps_func>;
status = "okay";
};
lpwm属性配置

lpwm输出30HZ,触发sensor输出30帧图像
c
.lpwm_attr = {
.enable = 1,
.lpwm_chn_attr = {
{ .trigger_source = 7,
.trigger_mode = 1,
.period = 33333,
.offset = 10,
.duty_time = 100,
.threshold = 0,
.adjust_step = 0,
},
{ .trigger_source = 7,
.trigger_mode = 1,
.period = 33333,
.offset = 10,
.duty_time = 100,
.threshold = 0,
.adjust_step = 0,
},
{ .trigger_source = 7,
.trigger_mode = 1,
.period = 33333,
.offset = 10,
.duty_time = 100,
.threshold = 0,
.adjust_step = 0,
},
{ .trigger_source = 7,
.trigger_mode = 1,
.period = 33333,
.offset = 10,
.duty_time = 100,
.threshold = 0,
.adjust_step = 0,
},
},
