关于测试点的使用,以便于工厂测试,节约工厂测试工时(可节约员工在上电,需要自己按键进入DUT模式,例如五击 六击 )
关于测试点的使用,使用某个IO口,通过外部控制IO口的高低电平,让其快速进入DUT模式
GPIOX 的使用 :
-
GPIOAFEN //0:当作通用GPIO使用 //1:当作其它功能性IO,如串口/SPI..
-
GPIOADE //数字IO使能: 0为模拟IO, 1 为数字IO
-
GPIOADIR //控制IO的方向: 0为输出, 1为输入.
-
GPIOA //IO方向为输入时,读此寄存器的值即得到引脚的高低状态 //IO为输出时, 设置此寄存器的高低即设置对应引脚的高低输出.
-
GPIOADRV //0 输出驱动为8mA //1 输出驱动为32 mA //IO方向为输出时有效
//以下寄存器控制上拉或下拉, 注意只有当IO设置为输入时, 上下拉才有效. //IO方向为输出时上下拉自动无
-
GPIOAPU //10K上拉使能
-
GPIOAPD //10K下拉使能
-
GPIOAPU200K //200K上拉使能
-
GPIOAPD200K //200K下拉使能
-
GPIOAPU300 //300欧上拉使能
-
GPIOAPD300 //300欧下拉使能
-
作为输出时,输出电平的高低也可以通过设置GPIOASET/GPIOACLR来快速实现,注意GPIOASET/GPIOACLR只对写1的位有效.
-
GPIOASET = BIT(0); //PA0输出高, 等效于 GPIOA |= BIT(0);其它位状态不变.
关于IO的使用,在硬件中会留有测试点
例如: 使用PB3 IO口(在硬件的方式,此时PB3即是烧录update,又可用来当测试点 ),将PB3口 对GND,开机则直接进入DUT模式,如果PB3与GND连接,则此时是低电平,在开机后,我们只需要在软件中判断PB3此时的高低电平来决定是否让其进入DUT模式
首先我们先设置好PB3 IO口初始化的方式,设置其输入 输出的方向
#define PB3_DUT_ENABLE 1
#define PB3_INIT() {GPIOBDE|=BIT(3);GPIOBPU|=BIT(3);GPIOBDIR|=BIT(3);}
#define PB3_STA() GPIOB & BIT(3)
#define PB3_IS_ONLINE() (GPIOB & BIT(3)) == 0
IO口的初始化
在bsp_sys.c 中,bsp_sys_init()函数中进行PB3 的初始化
#if PB3_DUT_ENABLE // PB3测试点 IO 初始化
PB3_INIT();
#endif
初始化完成后,就可以直接使用了,在MSG_SYS_1S中使用,一直检测
#if PB3_DUT_ENABLE
if(PB3_IS_ONLINE()){ //检测PB3处是否是低电平(PB3对GND)
if(bt_cfg.cbt_test_mode != 1){ //非DUT模式下,即可进入
sys_cb1.user_cbt_led_flag = 1;
bt_nor_delete_link_info();
bt_tws_delete_link_info();
sys_warning_play(T_WARNING_NEXT_TRACK, 1); //长按“滴”一声
delay_5ms(10);
sys_warning_play(T_WARNING_NEXT_TRACK, 1); //长按“滴”一声
delay_5ms(10);
func_cb.sta = FUNC_BT_CBT; //四击进CBT测试模式
}
}
#endif
如何通过按键退出DUT模式?
例如:在双击 或三击事件中使用
if(func_cb.sta == FUNC_BT_CBT){ //双击退出DUT模式
bt_cfg.cbt_test_mode = 0;
sys_cb1.user_cbt_led_flag = 0; //指示灯的标志
sys_warning_play(T_WARNING_NEXT_TRACK, 1); //长按“滴”一声
delay_5ms(10);
func_cb.sta = FUNC_NULL;
}
如何在DUT模式下,查看版本号
if(1 == bt_cfg.cbt_test_mode){
//DUT模式下,提示音版本号信息
sys_cb1.user_cbt_led_flag = 0;
sys_warning_play(T_WARNING_NUM_1, 0);
sys_warning_play(T_WARNING_NUM_4, 0);
}