检查出高电平就开机
3、主要的低频电芯片供电使用1117.33,两个通道输出,接耳夹。使用时需要耳夹擦拭湿润,增加良好导电性能。4、主单片机控制各个模块供电时序,以减少耗电。5、使用了蓝牙模块ECB02C与平板电脑通讯,方便控制及检测。6、刺激芯片主要程序如下intmain()
{
intresult=0;
count=0;
//设置为最大时钟周期,以便它也可以运行以进行定时模拟
CMSDK_MTPREG-MTP_CR=0x00000003;
//sethsifrequencyas32MHz
CMSDK_SYSCON-HSI_CTRL=(CMSDK_SYSCON-HSI_CTRL~CMSDK_SYSCON_HSI_FREQ_Msk)|(0x3CMSDK_SYSCON_HSI_FREQ_Pos);
//使能uartWAVE_GENpclk
CMSDK_SYSCON-APB_CLKEN=0x1003|0x4000;;
//boost电压选择
//boost_voltage_select_11V();
//boost_voltage_select_15V();
//boost_voltage_select_26V();
//boost_voltage_select_45V();
//boost_voltage_select_55V();
//UARTinit
UartStdOutInit();//已修改串口驱动.
//configgpioforUART1(selectALT:1)touseUART1(txd,rxd,rts,cts)totest
CMSDK_GPIO-ALTFL|=(124)|(126);
NVIC_DisableIRQ(UART1_IRQn);//禁用嵌套向量中断控制器(NVIC)中断。
NVIC_ClearPingIRQ(UART1_IRQn);//清除挂起的嵌套向量中断控制器(NVIC)中断。
NVIC_EnableIRQ(UART1_IRQn);//启用嵌套向量中断控制器(NVIC)中断
CMSDK_UART1-IER|=CMSDK_UART_IER_RDAI_EN_Msk;
//测试横幅消息和修订版本号。
//puts("ENS1-WAVE_GENERATOR_DRIVER_A_Test-$Revision:R001\n");
//使能drivers
//puts("Testenablingall4drivers\n");
i_wave=0x00;
i_wave_sta1=1;
while(1)
{
//ECB02_Transmit(onoff,power,wave);
delay_ms(1000);
if(i_wave_sta1==1)//AA
{
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_CTRL_REG=0;
WAVE_GEN_DRVA_BLK1-WAVE_GEN_DRV_CTRL_REG=0;
i_wave_sta2=0;
i_wave_sta3=0;
i_wave_sta4=0;
i_wave_sta5=0;
i_wave_sta6=0;
i_wave_sta7=0;
i_wave_sta8=0;
i_wave_sta9=0;
i_wave_sta10=0;
onoff=0x00;
power=0x00;
i_wave=0x00;
printf("11\n");
i_wave_sta1=0;
printf("打印变量%d\n",i_wave);
for(inti=0;i32;i++)
{
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_ADDR_REG=i;
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_REG=i_wave;
}
}
if(i_wave_sta2==1)//A1
{
//波形发生器driver_APULSE(方波)test
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK0);
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK1);
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_CTRL_REG=0x00000001;
WAVE_GEN_DRVA_BLK1-WAVE_GEN_DRV_CTRL_REG=0x00000001;
i_wave_sta1=0;
i_wave_sta3=0;
i_wave_sta4=0;
i_wave_sta5=0;
i_wave_sta6=0;
i_wave_sta7=0;
i_wave_sta8=0;
i_wave_sta9=0;
i_wave_sta10=0;
onoff=0x01;
power=0x12;
i_wave=0x04;
boost_voltage_select_15V();
printf("12\n");
i_wave_sta2=0;
printf("打印变量%d\n",i_wave);
for(inti=0;i32;i++)
{
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_ADDR_REG=i;
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_REG=i_wave;
}
}
if(i_wave_sta3==1)//A2
{
//波形发生器driver_APULSE(方波)test
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK0);
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK1);
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_CTRL_REG=0x00000001;
WAVE_GEN_DRVA_BLK1-WAVE_GEN_DRV_CTRL_REG=0x00000001;
i_wave_sta2=0;
i_wave_sta1=0;
i_wave_sta4=0;
i_wave_sta5=0;
i_wave_sta6=0;
i_wave_sta7=0;
i_wave_sta8=0;
i_wave_sta9=0;
i_wave_sta10=0;
onoff=0x01;
power=0x13;
i_wave=0x05;
boost_voltage_select_15V();
printf("13\n");
i_wave_sta3=0;
printf("打印变量%d\n",i_wave);
for(inti=0;i32;i++)
{
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_ADDR_REG=i;
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_REG=i_wave;
}
}
if(i_wave_sta4==1)//A3
{
//波形发生器driver_APULSE(方波)test
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK0);
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK1);
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_CTRL_REG=0x00000001;
WAVE_GEN_DRVA_BLK1-WAVE_GEN_DRV_CTRL_REG=0x00000001;
i_wave_sta2=0;
i_wave_sta3=0;
i_wave_sta1=0;
i_wave_sta5=0;
i_wave_sta6=0;
i_wave_sta7=0;
i_wave_sta8=0;
i_wave_sta9=0;
i_wave_sta10=0;
onoff=0x01;
power=0x14;
i_wave=0x06;
boost_voltage_select_15V();
printf("14\n");
i_wave_sta4=0;
printf("打印变量%d\n",i_wave);
for(inti=0;i32;i++)
{
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_ADDR_REG=i;
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_REG=i_wave;
}
}
if(i_wave_sta5==1)//A4
{
//波形发生器driver_APULSE(方波)test
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK0);
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK1);
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_CTRL_REG=0x00000001;
WAVE_GEN_DRVA_BLK1-WAVE_GEN_DRV_CTRL_REG=0x00000001;
i_wave_sta2=0;
i_wave_sta3=0;
i_wave_sta4=0;
i_wave_sta1=0;
i_wave_sta6=0;
i_wave_sta7=0;
i_wave_sta8=0;
i_wave_sta9=0;
i_wave_sta10=0;
onoff=0x01;
power=0x15;
i_wave=0x07;
boost_voltage_select_15V();
printf("15\n");
i_wave_sta5=0;
printf("打印变量%d\n",i_wave);
for(inti=0;i32;i++)
{
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_ADDR_REG=i;
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_REG=i_wave;
}
}
if(i_wave_sta6==1)//A5
{
//波形发生器driver_APULSE(方波)test
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK0);
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK1);
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_CTRL_REG=0x00000001;
WAVE_GEN_DRVA_BLK1-WAVE_GEN_DRV_CTRL_REG=0x00000001;
i_wave_sta2=0;
i_wave_sta3=0;
i_wave_sta4=0;
i_wave_sta5=0;
i_wave_sta1=0;
i_wave_sta7=0;
i_wave_sta8=0;
i_wave_sta9=0;
i_wave_sta10=0;
onoff=0x01;
power=0x16;
i_wave=0x09;
boost_voltage_select_15V();
printf("16\n");
i_wave_sta6=0;
printf("打印变量%d\n",i_wave);
for(inti=0;i32;i++)
{
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_ADDR_REG=i;
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_REG=i_wave;
}
}
if(i_wave_sta7==1)//A6
{
//波形发生器driver_APULSE(方波)test
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK0);
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK1);
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_CTRL_REG=0x00000001;
WAVE_GEN_DRVA_BLK1-WAVE_GEN_DRV_CTRL_REG=0x00000001;
i_wave_sta2=0;
i_wave_sta3=0;
i_wave_sta4=0;
i_wave_sta5=0;
i_wave_sta6=0;
i_wave_sta1=0;
i_wave_sta8=0;
i_wave_sta9=0;
i_wave_sta10=0;
onoff=0x01;
power=0x17;
i_wave=0x0B;
boost_voltage_select_15V();
printf("17\n");
i_wave_sta7=0;
printf("打印变量%d\n",i_wave);
for(inti=0;i32;i++)
{
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_ADDR_REG=i;
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_REG=i_wave;
}
}
if(i_wave_sta8==1)//A7
{
//波形发生器driver_APULSE(方波)test
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK0);
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK1);
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_CTRL_REG=0x00000001;
WAVE_GEN_DRVA_BLK1-WAVE_GEN_DRV_CTRL_REG=0x00000001;
i_wave_sta2=0;
i_wave_sta3=0;
i_wave_sta4=0;
i_wave_sta5=0;
i_wave_sta6=0;
i_wave_sta7=0;
i_wave_sta1=0;
i_wave_sta9=0;
i_wave_sta10=0;
onoff=0x01;
power=0x18;
i_wave=0x0D;
boost_voltage_select_15V();
printf("18\n");
i_wave_sta8=0;
printf("打印变量%d\n",i_wave);
for(inti=0;i32;i++)
{
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_ADDR_REG=i;
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_REG=i_wave;
}
}
if(i_wave_sta9==1)//A8
{
i_wave_sta2=0;
i_wave_sta3=0;
i_wave_sta4=0;
i_wave_sta5=0;
i_wave_sta6=0;
i_wave_sta7=0;
i_wave_sta8=0;
i_wave_sta1=0;
i_wave_sta10=0;
onoff=0x01;
power=0x0F;
i_wave=0x15;
boost_voltage_select_15V();
//波形发生器driver_APULSE(方波)test
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK0);
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK1);
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_CTRL_REG=0x00000001;
WAVE_GEN_DRVA_BLK1-WAVE_GEN_DRV_CTRL_REG=0x00000001;
printf("19\n");
i_wave_sta9=0;
printf("打印变量%d\n",i_wave);
for(inti=0;i32;i++)
{
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_ADDR_REG=i;
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_REG=i_wave;
}
}
if(i_wave_sta10==1)
{
//波形发生器driver_APULSE(方波)test
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK0);
result+=wavegen_driverA_pulse_test(WAVE_GEN_DRVA_BLK1);
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_CTRL_REG=0x00000001;
WAVE_GEN_DRVA_BLK1-WAVE_GEN_DRV_CTRL_REG=0x00000001;
i_wave_sta2=0;
i_wave_sta3=0;
i_wave_sta4=0;
i_wave_sta5=0;
i_wave_sta6=0;
i_wave_sta7=0;
i_wave_sta8=0;
i_wave_sta9=0;
i_wave_sta1=0;
onoff=0x01;
power=0x20;
i_wave=0xff;
boost_voltage_select_15V();
printf("20\n");
i_wave_sta10=0;
printf("打印变量%d\n",i_wave);
for(inti=0;i32;i++)
{
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_ADDR_REG=i;
WAVE_GEN_DRVA_BLK0-WAVE_GEN_DRV_IN_WAVE_REG=i_wave;
}
}
};
if(result==0){
puts("**TESTPASSED**\n");
}else{
puts("**TESTFAILED**\n");
}
UartSimulation();
return0;
}
/*---------------------------------------------------------------*/
/*WAVEGENDriver_APULSEtest*/
/*---------------------------------------------------------------*/
intwavegen_driverA_pulse_test(CMSDK_WAVE_GEN_TypeDef*CMSDK_WAVEGEN_DRVA)
{
intreturn_val=0;
interr_code=0;
puts("\nDRIVERAPULSETEST\n");
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_REST_T_REG=100;//100us死区时间
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_SILENT_T_REG=20;//1000us静默时间
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_CLK_FREQ_REG=0x00000020;//32MHZ==PCLK
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_HLF_WAVE_PRD_REG=538;//200us脉宽1
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_NEG_HLF_WAVE_PRD_REG=538;//200us脉宽2
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_CONFIG_REG=0x0000004A;//bit0:restenable,1:negativeenable,2:silentenable,3:sourceBenable,5:continuemode,6:multi-electrode
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_ISEL_REG=0x07;//范围0x00-0x07单元电流总电流=单元电流ISEL*WAVE_GEN_DRV_IN_WAVE_REG
for(inti=0;i64;i++)
{
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_IN_WAVE_ADDR_REG=i;
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_IN_WAVE_REG=i_wave;//sine_data[i];//最大0xff0-7档位*单元电流33ua*电流档位
}
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_ALT_LIM_REG=0x00000000;//无交替
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_ALT_SILENT_LIM_REG=0x00000000;//交替后静默的时钟数。在这种情况下,驱动器b连续交替
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_DELAY_LIM_REG=0x00000000;//延迟时钟数
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_NEG_SCALE_REG=0x00000001;//倍乘正半周期幅值,如超过255,则从0开始增长
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_NEG_OFFSET_REG=0x00000000;//偏移正半周期幅值,如超过255,则从0开始增长,
//如正半周期幅值为250,此处设置为10,则负半周期幅值为5!!!
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_INT_REG=0x0;//interruptregistersetto0
CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_CTRL_REG=0x00000001;//使能driver
//
//CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_ALT_LIM_REG=0x00000000;//无交替模式。
//CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_ALT_SILENT_LIM_REG=0x00000000;//交替后保持沉默的时钟数。在这种情况下,驱动器B持续交替。
//if(CMSDK_WAVEGEN_DRVA==WAVE_GEN_DRVA_BLK0)
//
//{
//CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_DELAY_LIM_REG=0x00000640;//延迟时钟数为1600。
//}
//elseif(CMSDK_WAVEGEN_DRVA==WAVE_GEN_DRVA_BLK1)
//
//
//{
//CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_DELAY_LIM_REG=0x00000C80;//延迟时钟数为3200。
//}
//
//CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_NEG_SCALE_REG=1;//倍乘正半周期幅值,如超过255,则从0开始增长
//CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_NEG_OFFSET_REG=0;//偏移正半周期幅值,如超过255,则从0开始增长,
////如正半周期幅值为250,此处设置为10,则负半周期幅值为5!!!
//CMSDK_WAVEGEN_DRVA-WAVE_GEN_DRV_INT_REG=0x0;//中断寄存器设置为0。
/*Generatereturnvalue*/
if(err_code!=0)
{
puts("\nERROR:DriverATestFailed\n");
return_val=1;
err_code=0;
}
return(return_val);
}
voidECB02_Transmit(uint8_tonoff,uint8_tpower,uint8_twave)
{
uint8_tsbuf[7];
sbuf[0]=0x5A;//起止
sbuf[1]=0xA5;//起止
sbuf[2]=0x08;
sbuf[3]=onoff;//开关命令
sbuf[4]=power;//电流大小
sbuf[5]=wave;//波形
sbuf[6]=0x3C;//结束符
for(inti=0;i7;i++)
{
printf("%02X",sbuf[i]);
}
printf("\n");
delay_ms(20);
}