| | |
| | | #include "queue.h" |
| | | #include "f2f.h" |
| | | #include "var_state.h" |
| | | #include "tob.h" |
| | | #include "tg/module_def.h" |
| | | #include "tg/tg_scene.h" |
| | | |
| | | //全局变量 |
| | | #define MAX_INTR 100 |
| | |
| | | GPIO_SetOutPut(GPIOB, GPIO_Pin10, level); |
| | | } |
| | | |
| | | |
| | | /* |
| | | * 128 · |
| | | UpdateInput && UpdateOutput 7.37% |
| | |
| | | * */ |
| | | extern "C" uvoid AudioProcCallBack (u32 iid) |
| | | { |
| | | //ToB* tob = ToB::GetInstance(); |
| | | ToB* tob = ToB::GetInstance(); |
| | | ufloat clock_start,clock_stop; |
| | | VarState& var = VarState::GetInstance(); |
| | | |
| | | //if(tob == NULL) return ; |
| | | if(var.master_intr == iid){ |
| | | var.dsp_status = DSPStatus::dsp_running_ok; |
| | | } |
| | | if(tob == NULL) return ; |
| | | |
| | | if(var.TopoLoading){ |
| | | MuteOutput(); |
| | | } else if(var.master_intr == iid){ |
| | | } |
| | | else if(var.master_intr == iid){ |
| | | clock_start = clock(); |
| | | UpdateInput(iid, DMACount[iid]&0x1); |
| | | //tob->toProc(); |
| | | tob->toProc(); |
| | | |
| | | UpdateOutput(iid, DMACount[iid]&0x1); |
| | | //LP_transmit(); |
| | | // LP_transmit(); |
| | | ModulesAsynSetInterval(proc_secs); |
| | | fir_acc_startup(); |
| | | clock_stop = clock(); |
| | |
| | | UpdateInput(iid, DMACount[iid]&0x1); |
| | | UpdateOutput(iid, DMACount[iid]&0x1); |
| | | } |
| | | DMACount[iid]++; |
| | | |
| | | ++DMACount[iid]; |
| | | } |
| | | |
| | | int main(int argc, char *argv[]) |
| | |
| | | memset(DMACount, 0, sizeof(DMACount)); |
| | | |
| | | Message* spiMsg = new Message(8); |
| | | //第一次启动上报特别是仿真的时候需要arm'重新发送消息. |
| | | spiMsg->DspStatusPush(DSP_EMULATE_DEBUG, 0, 0); |
| | | spiMsg->ReportDspStatus(&msg); |
| | | |
| | | SPI2_Init(); |
| | | |
| | | fir_acc_init(); |
| | | |
| | | //通知arm启动完成. |
| | | //dir: pin12, High level DSP can receive data, low level DSP has data to send . |
| | | //busy: pin13, low level DSP is in busy state and cannot receive and send data, high level is free. |
| | | //dir: pin12, High level DSP can receive data, low level DSP has data toz send . |
| | | //busy: pin13/PB5, low level DSP is in busy state and cannot receive and send data, high level is free. |
| | | GPIO_SetOutPut(GPIOA, GPIO_Pin12, GPIO_HIGH); |
| | | GPIO_SetOutPut(GPIOA, GPIO_Pin13, GPIO_HIGH); |
| | | GPIO_SetOutPut(GPIOB, GPIO_Pin5, GPIO_HIGH); |
| | | |
| | | //第一次启动上报特别是仿真的时候需要arm'重新发握手. |
| | | spiMsg->DspStatusPush(DSP_EMULATE_DEBUG, 0, 0); |
| | | spiMsg->ReportDspStatus(&msg); |
| | | |
| | | printf("free sram %d, L2 %d\n", sram_free_space(SRAM_DDR, mem_any), sram_free_space(SRAM_L2, mem_any)); |
| | | |
| | | while(1) { |
| | | asyn_proc_secs = ModulesAsynProcess(); |
| | |
| | | ledCount = DMACount[var.master_intr]; |
| | | |
| | | cpu = cpu_utility()*100; //all modules execute time.; |
| | | mem = (1- space_unused()/total_mem)*10000; |
| | | mem = (1.0f - (float)space_unused()/total_mem)*10000; |
| | | |
| | | spiMsg->DspStatusPush(DSP_MEM_UTILITY, &mem, 1); |
| | | spiMsg->DspStatusPush(DSP_CPU_UTILITY, &cpu, 1); |
| | | spiMsg->DspStatusPush(DSP_CLOCK_STATUS,&var.dsp_status ,1); |
| | | spiMsg->DspStatusPush(DSP_RUNNING_STATUS,&var.dsp_status ,1); |
| | | |
| | | spiMsg->ReportDspStatus(&msg); |
| | | } |
| | |
| | | |
| | | //clock state will change after running,it need check always. |
| | | //about 1s |
| | | if(++loop_cnt > 100000000){ |
| | | if(clock_check_count == DMACount[var.master_intr]) { |
| | | if(++loop_cnt > 5e+6){ |
| | | if (var.clock_ok && clock_check_count == DMACount[var.master_intr]) { |
| | | var.dsp_status = dsp_no_clock; |
| | | spiMsg->DspStatusPush(DSP_CLOCK_STATUS,&var.dsp_status ,1); |
| | | spiMsg->DspStatusPush(DSP_RUNNING_STATUS, &var.dsp_status ,1); |
| | | spiMsg->ReportDspStatus(&msg); |
| | | printf("clk0 ok\n"); |
| | | } |
| | | loop_cnt =0; |
| | | clock_check_count = DMACount[var.master_intr]; |
| | | // printf("clk1 ok\n"); |
| | | } |
| | | |
| | | |
| | | if(!var.clock_ok && var.dsp_status == DSPStatus::dsp_running_ok && var.HandShakeSuccesful) { |
| | | //notify arm to work normaly. |
| | | spiMsg->DspStatusPush(DSP_CLOCK_STATUS, 0, 0); |
| | | spiMsg->DspStatusPush(DSP_CLOCK_STATUS, &var.dsp_status, 1); |
| | | request_topo_count = DMACount[var.master_intr] ; |
| | | var.clock_ok = utrue; |
| | | spiMsg->ReportDspStatus(&msg); |
| | | printf("clk2 ok\n"); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | } |