chenlh
2025-09-18 ab07ada908b82340e7acd899e85a9802cf8a9057
src/main.cpp
@@ -26,6 +26,9 @@
#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
@@ -47,6 +50,7 @@
   GPIO_SetOutPut(GPIOB, GPIO_Pin10, level);
}
/*
 * 128 ·
UpdateInput && UpdateOutput 7.37%
@@ -54,20 +58,25 @@
 * */
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();
@@ -77,7 +86,8 @@
      UpdateInput(iid, DMACount[iid]&0x1);
      UpdateOutput(iid, DMACount[iid]&0x1);
   }
   DMACount[iid]++;
   ++DMACount[iid];
}
int main(int argc, char *argv[])
@@ -109,19 +119,22 @@
   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();
@@ -134,11 +147,11 @@
         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);
      }
@@ -157,23 +170,28 @@
      //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");
      }
   }
}