分支資料監測終端(新增TCBUS事件清除功能)

DLluop發表於2020-12-23


前言:記錄一下將定時器延時實現的TCBUS清除事件功能

1、傳送報文起始位、校驗位以及停止位的配置

報文:

1.1、幀格式

INT8U CLEAR_alarm_state[7] = {0x7F,0xFB,0xF7,0x01,0x63,0xF0,0xA5};

  在傳送資料之前需要先配置好起始位、校驗位以及停止位,當按位元組傳輸時先傳低位後傳高位,其格式如圖2-3 所示,我們稱之為一個幀字元(Frame Character,FC)。每個幀字元包括1 位起始位(0)、8 位資訊位、1 位偶校驗位(E)和1~2 位停止位(1);其中,發碼設定幀字元12 位,收碼設定幀字元11 位。

1.2、字元格式

在這裡插入圖片描述
其中起始位、校驗位以及停止位的配置是在函式初始化裡面進行的:drv_uart_init(2,2400,USART_8E2);
PLIB_USART_LineControlModeSelect(usart_id, uartMode);
在這裡插入圖片描述
掩碼是0x06 : 0110 表示 bit 2-1 寫入暫存器的值value=1 位置pos為0 :01 表示偶校驗。

#define _SFR_BIT_SET(reg,pos)        ( *((SFR_TYPE *)((reg)+(2))) = 1<<(pos) )

校驗位pos=0,表示bit0置為1表示兩個停止位,可能起始位預設都是1位的無需配置。

/*
  Parameters:
    reg - SFR register name.SFR暫存器名。
    mask - field bit mask within the register.暫存器內的欄位位掩碼。
    pos - bit position within register.暫存器內位的位置。
    val - new value of field, with the LSb justified to be at bit zero.欄位的新值,LSb對齊為零位。
*/    
#define _SFR_FIELD_WRITE(reg,mask,pos,val)  \ 
   (  *((SFR_TYPE *)(reg)) = \
        ( (*((SFR_TYPE *)(reg))) & ~(mask) ) | ( (mask)&((val)<<(pos)) )  )

在這裡插入圖片描述

相關文章