⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comm_gen.c

📁 PIC Kit serial source code.
💻 C
📖 第 1 页 / 共 3 页
字号:
      case COMM_TAG_GEN_TIMEOUT_AB1_RST:
         COMM_TIMEOUT_AB1_FLAG = 0;
         comm_state = COMM_STATE_GEN_NEXT;
         break;

      //====================================================
      case COMM_TAG_GEN_MACRO_CLEAR:
         cbuf3_init();
         comm_state = COMM_STATE_GEN_NEXT;
         COMM_MACRO_FLAG = 0;                 // insurance
         break;
                     
      //====================================================
      case COMM_TAG_GEN_MACRO_DATA:
         if(not COMM_0_FLAG)
         {
            if(cbuf1.used)
            {
               comm_cmnd_count_1 = cbuf1_get();
               COMM_0_FLAG = 1;
            }
         }
         else
         {
            while(cbuf1.used)
            {
               if(comm_cmnd_count_1--)
                  comm_post_cbuf3(cbuf1_get());
               else
               {
                  comm_state = COMM_STATE_GEN_NEXT;
                  break;
               }
            }
         }
         break;

      //====================================================
      case COMM_TAG_GEN_MACRO_DATA_START:
         if(cbuf1.used)
         {
            comm_data = cbuf1_get();
            if(comm_data == COMM_TAG_GEN_MACRO_DATA_END)
               comm_state = COMM_STATE_GEN_NEXT;
            else
               comm_post_cbuf3(comm_data);
         }
         break;

      //====================================================
      case COMM_TAG_GEN_MACRO_RUN:
         if(not COMM_0_FLAG)
         {
            if(cbuf1.used)
            {
               comm_macro_count_1_W.lo = 0;
               comm_macro_count_2_W.lo = cbuf1_get();
               COMM_0_FLAG = 1;
            }
         }
         else
         {
            if(cbuf1.used)
            {
               comm_macro_count_1_W.hi = 0;
               comm_macro_count_2_W.hi = cbuf1_get();
               comm_state = COMM_STATE_GEN_MACRO_X_INIT;
               if(comm_macro_count_2_W._word == 0)
                  COMM_SB_MACRO_CONT_FLAG = 1;
               else
                  COMM_SB_MACRO_CONT_FLAG = 0;
               COMM_MACRO_FLAG = 1;
            }
         }
         break;

      //====================================================
      case COMM_TAG_GEN_END_SCRIPT:
         COMM_SB_END_SCRIPT_FLAG = 1;                    // set status bit
         comm_post_event(COMM_TAG_GEN_EVENT_END_SCRIPT); // post "event"
         comm_state = COMM_STATE_GEN_NEXT;               // 
         break;

      //====================================================
      case COMM_TAG_GEN_MARKER_HOST:
         if(comm_data_get())
         {
            comm_post_event_1b(COMM_TAG_GEN_MARKER_DEV, comm_data);
            comm_state = COMM_STATE_GEN_NEXT;
         }
         break;

      //====================================================
      case COMM_TAG_GEN_TIMER_RESET:
         timer0_reg_clear();
         comm_state = COMM_STATE_GEN_NEXT;
         break;

      //====================================================
      default:
         COMM_SB_BAD_CMND_FLAG = 1;
         break;
         
   }

}
                     
//==========================================================
//==========================================================
//--- UTILITIES
//==========================================================
//==========================================================

//==========================================================
//--- comm_data_get()
//    fetch byte from script
//
//    retrieve data from circular buffer(s)
//    if MACRO active, fetch byte from CBUF3
//    if MACRO not active, fetch byte from CBUF1
//    return:
//    0: no data available
//    1: data available in global variable: "comm_data"
//==========================================================
TD_BYTE comm_data_get(void)
{
   //--- DISABLE INTERRUPTS
   COMM_GIEL1_FLAG = 0;
   if(INTCONbits.GIEL)
   {
      while(INTCONbits.GIEL)
      {
         INTCONbits.GIEL = 0;
      }
      COMM_GIEL1_FLAG = 1;
   }

   if(COMM_MACRO_FLAG)
   {
      if(cbuf3.used)
      {
         comm_data = cbuf3_get();
         cbuf3_put(comm_data);  
         comm_cmnd_macro_count_1--;
         if(COMM_GIEL1_FLAG)
            INTCONbits.GIEL = 1;
         return 1;
      }
   }
   else
   {
      if(cbuf1.used)
      {
         comm_data = cbuf1_get();
         if(COMM_GIEL1_FLAG)
            INTCONbits.GIEL = 1;
         return 1;
      }
   }

   if(COMM_GIEL1_FLAG)
      INTCONbits.GIEL = 1;
   return 0;
   

}

//==========================================================
//--- comm_post_cbuf2()
//    post data byte to CBUF2
//
//    if CBUF2 full, set OVF ERROR in STATUS_BLOCK
//==========================================================
void comm_post_cbuf2(TD_BYTE data_byte)
{
//   if(COMM_CB_EVENT_FLAG)
//   {
      if(cbuf2.unused)
      {
         cbuf2_put(data_byte);
      }
      else
      {
         COMM_SB_CBUF2_OVF_FLAG = 1;
      }
//   }
}
      
//==========================================================
//--- comm_post_cbuf2_time()
//    post data byte to CBUF2 & time stamp
//    if CBUF2 full, set OVF ERROR in STATUS_BLOCK
//==========================================================
void comm_post_cbuf2_time(TD_BYTE data_byte)
{
   //--- POST BYTE
   comm_post_cbuf2(data_byte);

   //--- POST TIME
   if(COMM_CB_EVENT_TIME_FLAG)
      comm_post_event_time();
}
      
//==========================================================
//--- comm_post_cbuf3()
//    post data byte to CBUF3
//
//    if CBUF3 full, set OVF ERROR in STATUS_BLOCK
//==========================================================
void comm_post_cbuf3(TD_BYTE data_byte)
{
   if(cbuf3.unused)
   {
      cbuf3_put(data_byte);
   }
   else
   {
      COMM_SB_CBUF3_OVF_FLAG = 1;
   }
}


//==========================================================
//--- comm_led_busy_data()
//    indicate data transaction using LED
//==========================================================
void comm_led_busy_data(void)
{
   if(not EXEC_CB_LED2_DISABLE_DFLT_FLAG)
   {
      led_2_config(COMM_LED_CONFIG_BUSY_DATA);
   }
}


//==========================================================
//==========================================================


//==========================================================
//--- comm_post_event()
//    post "EVENT" marker (and TIME if enabled)
//==========================================================
void comm_post_event(TD_BYTE b0)
{
         
   //--- DISABLE INTERRUPTS
   COMM_GIEL1_FLAG = 0;
   if(INTCONbits.GIEL)
   {
      while(INTCONbits.GIEL)
      {
         INTCONbits.GIEL = 0;
      }
      COMM_GIEL1_FLAG = 1;
   }

   //--- POST
   if(COMM_CB_EVENT_FLAG)
   {
      comm_post_cbuf2_time(b0);
   }

   //--- RE-ENABLE INTERRUPTS
   if(COMM_GIEL1_FLAG)
   {
      INTCONbits.GIEL = 1;
   }
}
      
//==========================================================
//--- comm_post_event_1b()
//    post "EVENT" marker w/ 1 "event-dependant" data byte
//==========================================================
void comm_post_event_1b(TD_BYTE b0, TD_BYTE b1)
{

   //--- DISABLE INTERRUPTS
   COMM_GIEL1_FLAG = 0;
   if(INTCONbits.GIEL)
   {
      while(INTCONbits.GIEL)
      {
         INTCONbits.GIEL = 0;
      }
      COMM_GIEL1_FLAG = 1;
   }


   //--- POST
   if(COMM_CB_EVENT_FLAG)
   {
      comm_post_cbuf2(b0);
      comm_post_cbuf2_time(b1);
   }
   
   //--- RE-ENABLE INTERRUPTS
   if(COMM_GIEL1_FLAG)
   {
      INTCONbits.GIEL = 1;
   }
}
      
//==========================================================
//--- comm_post_event_2b()
//    post "EVENT" marker w/ 2 "event-dependant" data bytes
//==========================================================
void comm_post_event_2b(TD_BYTE b0, TD_BYTE b1, TD_BYTE b2)
{
   //--- DISABLE INTERRUPTS
   COMM_GIEL1_FLAG = 0;
   if(INTCONbits.GIEL)
   {
      while(INTCONbits.GIEL)
      {
         INTCONbits.GIEL = 0;
      }
      COMM_GIEL1_FLAG = 1;
   }

   //--- POST
   if(COMM_CB_EVENT_FLAG)
   {
      comm_post_cbuf2(b0);
      comm_post_cbuf2(b1);
      comm_post_cbuf2_time(b2);
   }

   //--- RE-ENABLE INTERRUPTS
   if(COMM_GIEL1_FLAG)
   {
      INTCONbits.GIEL = 1;
   }
}
      
//==========================================================
//--- comm_post_data()
//    post event: "DATA"
//==========================================================
void comm_post_data(void)
{
   //--- DISABLE INTERRUPTS
   COMM_GIEL1_FLAG = 0;
   if(INTCONbits.GIEL)
   {
      while(INTCONbits.GIEL)
      {
         INTCONbits.GIEL = 0;
      }
      COMM_GIEL1_FLAG = 1;
   }

   //--- POST
   comm_post_cbuf2(COMM_TAG_GEN_DATA);
   comm_post_cbuf2_time(comm_data);

   //--- RE-ENABLE INTERRUPTS
   if(COMM_GIEL1_FLAG)
   {
      INTCONbits.GIEL = 1;
   }
}


//==========================================================
//--- comm_post_event_time()
//    post event: "TIME"
//==========================================================
void comm_post_event_time(void)
{
   //--- DISABLE INTERRUPTS
   COMM_GIEL3_FLAG = 0;
   if(INTCONbits.GIEL)
   {
      while(INTCONbits.GIEL)
      {
         INTCONbits.GIEL = 0;
      }
      COMM_GIEL3_FLAG = 1;
   }

   comm_post_event_time_get();
   comm_post_cbuf2(COMM_TAG_GEN_EVENT_TIME);
   //comm_post_cbuf2(timer0_reg[0]);
   comm_post_cbuf2(timer0_reg[1]);
   comm_post_cbuf2(timer0_reg[2]);

   //--- RE-ENABLE INTERRUPTS
   if(COMM_GIEL3_FLAG)
      INTCONbits.GIEL = 1;
}

//==========================================================
//--- comm_post_event_time_get()
//    fetch time stamp, post TIMER_OVF event if necessary
//==========================================================
void comm_post_event_time_get(void)
{
   //--- DISABLE INTERRUPTS
   COMM_GIEL2_FLAG = 0;
   if(INTCONbits.GIEL)
   {
      while(INTCONbits.GIEL)
      {
         INTCONbits.GIEL = 0;
      }
      COMM_GIEL2_FLAG = 1;
   }

   //--- TIMER READ - CHECK OVERFLOW
   timer0_reg_read();
   if(TIMER0_REG_OVF_SYNC_FLAG)
   {
      comm_post_cbuf2(COMM_TAG_GEN_EVENT_TIME_ROLLOVER);
      TIMER0_REG_OVF_SYNC_FLAG = 0;
   }

   //--- RE-ENABLE INTERRUPTS
   if(COMM_GIEL2_FLAG)
      INTCONbits.GIEL = 1;
}     
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -