////////////////////////////////////////////////////////////////////////// /// COPYRIGHT NOTICE /// Copyright (c) 2023, 传控科技 /// All rights reserved. /// /// @file asp_gsensor.c /// @brief asp_gsensor /// ///(本文件实现的功能的详述) /// ////20221217_213321 CCmodify new uart struct for road protocol #include "msp_UART1.h" #include "msp_UART2.h" #include "debug_drv.h" #include "bsp_config.h" #include "asp_gsensor.h" #include "bsp_moto.h" #include "asp_move.h" #include "asp_lowpower.h" #define D_version_main "7.0" void L0_uart_close(void) { L0_uart1_str("\r\nuart1 close");/// Lc_delay_ms(20); EA = 0; D_uart1_ES_INT(0); //// D_UART2_ES_INT(0); AUXR = 0; //定时器2开始计时 ET1 = 0; //禁止定时器%d中断 TR1 = 0; //定时器1开始计时 } void L0_uart1_open(void) {// L0_uart1_buf_init();//串口初始化// EA = 1; L0_uart1_str("\r\nuart1 open"); } void L0_uart2_open(void) {// L0_uart2_buf_init(); EA = 1; L0_uart1_str("\r\nuart2 open"); } void L0_SetWakeUpTime(u16 SetTime) { SetTime = (U16)((32768UL * (U32)SetTime) / 16000); //重装值 = Fwkt/16 * SetTime/1000 = Fwkt * SetTime / 16000 if(SetTime > 0) SetTime--; WKTCL = (u8)SetTime; WKTCH = (u8)(SetTime >> 8) | 0x80; } void L0_main_lowp_set(void) {// L0_uart_close(); L0_SetWakeUpTime(10000);/// BITN_1(P_SW2 ,BITN7);///P_SW2|=0x80; ////PCON = 0; ///0:禁止端口内部的 4.1K 上拉电阻 ///1:使能端口内部的 4.1K 上拉电阻 P0PU = 0; P1PU = 0; P2PU = 0; P3PU = 0; P4PU = 0; P5PU = 0; ///0:使能端口的施密特触发功能。(上电复位后默认使能施密特触发) P0NCS = 0xff; P1NCS = 0xff; P2NCS = 0xff; P3NCS = 0xff; P4NCS = 0xff; P5NCS = 0xff; ////1:电平转换速度慢,相应的上下冲比较小 P0SR =0xff; P1SR =0xff; P2SR =0xff; P3SR =0xff; P4SR =0xff; P5SR =0xff; ///1:一般驱动能力 P0DR =0xff; P1DR =0xff; P2DR =0xff; P3DR =0xff; P4DR =0xff; P5DR =0xff; ///0:禁止数字信号输入。若 I/O 被当作比较器输入口、ADC 输入口、触摸按键输入口或者为外部晶 振接入脚等模拟口时, ///进入时钟停振模式前,必须设置为 0,否则会有额外的耗电。 ///1:使能数字信号输入。若 I/O 被当作数字口时,必须设置为 1,否 MCU 无法读取外部端口的电平。 P0IE =0; P1IE =0; P2IE =0; P3IE =0; P4IE =0; P5IE =0; BITN_1(P_SW2 ,BITN7);USBCON = 0; ////USBCON = 0; ///USBCON = 0x80; ADC_CONTR = 0; ////建议进入空闲模式和掉电模式前将 ADC 电源关闭,以降低功耗 RSTCFG = 0;//没有变化43ua 41ua 低压复位控制位 D_HighR_P0_ALL(); D_HighR_P1_ALL(); D_HighR_P2_ALL(); D_HighR_P3_ALL(); D_HighR_P4_ALL(); D_HighR_P5_ALL();/*********** P3 = 0; P0 = 0; P1 = 0; P2 = 0; P4 = 0; P5 = 0; *********/ P0 = 0xff; P1 = 0xff; P2 = 0xff; P4 = 0xff; P5 = 0xff; D_stdIO_P4(BITN1); ///D_OpenD_P4(BITN1); D_P41_ON(); /***** // XOSCCR =0; ///HIRCCR = 0; IRC32KCR = 0x80; //启动内部32K IRC while (!(IRC32KCR & 1)); //等待时钟稳定 CLKDIV = 0x00; //时钟不分频 CLKSEL = 0x03; //选择内部32K P_SW2 = 0x00; P45 P27 P26 P44 P43 p13 P23 switch2 限位开关 P40 SWITCH1 限位开关 P41 SW_CAL 电源分压电阻 =1 关闭 *******/ } /* void L2_main_version(u8 d) { printfs(D_version_main); L1_uartD_uc(d); printfs(D_BOARD_NAME); printfs(__DATE__); printfs(__TIME__); } */ void L1_main_lowp_test(void) {// while(9) { /// L2_gsensor_init(0); L0_main_lowp_set(); _nop_(); _nop_(); //// L0_uart_close(); PCON = 0x02; ////2222 //MCU进入掉电模式 ///D_LPCD_INT_CLOSE(); 对掉电唤醒后有一个中断进来没有效果 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); L0_uart1_open(); L0_uart2_open(); /// L2_main_version(0); /// L2_gsensor_init(1); } } void L3_test_lp(u8 filter)//// ON listen function { if(filter == pd->filter) {///filter num d1 d2 d3 ....dn //// FD 08 11 22 33 44 55 66 77 88 ///printf("\r\nDdebug:F1 R1 R2 R3 R4 ocr FD->"); switch (pd->ocr) { case 0x22: ///'s' ///FX R1 R2 R3 R4 ocr ///F1 m R2 R3 R4 22 // L0_moto_run(pd->R1); printf1("22: moto=(%X)",(int)pd->R1); break; default: printfs(" pp error\r\n "); break; }; printfs("333"); } } /*** case 0x23: ///'s' ///FX R1 R2 R3 R4 ocr ///F1 m R2 R3 R4 22 if(pd->R1) { D_BUZ_OPEN(); }else { D_BUZ_OFF(); } printf("22: moto=(%X)",(int)pd->R1); break; case 0x24: ///'s' ///F1 m 23 56 64 22 ts_task_move.loc_angle[0] = pd->R1; ts_task_move.loc_angle[1] = pd->R2; ts_task_move.loc_angle[2] = pd->R3; ts_task_move.loc_angle[3] = pd->R4; L3_task_s_go(ts_task_move,D_task_move_init); printf("move: %d %d %d %d )",(int)pd->R1,(int)pd->R2,(int)pd->R3,(int)pd->R4); break; case 0x25: ///'s' ///F1 m 23 56 64 22 ts_task_move.loc_angle[0] = pd->R1; ts_task_move.loc_angle[1] = pd->R2; ts_task_move.loc_angle[2] = pd->R3; ts_task_move.loc_angle[3] = pd->R4; L3_task_s_go(ts_task_move,D_task_move_init); ts_task_move.loc_now =D_2uc_u16(pd->R1, pd->R2); printf("move: loc_now %XH %d )",(int)ts_task_move.loc_now,(int)ts_task_move.loc_now); break; case 0x26: ///'s' ///F1 m 23 56 64 22 ts_task_move.loc_angle[0] = pd->R1; if(pd->R1) { ts_task_move.loc_now ++; } else { ts_task_move.loc_now --; } printf("move: loc_now %XH %d ->%d )",(int)ts_task_move.loc_now,(int)ts_task_move.loc_now,(int)ts_task_move.loc_want); break; ****/