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

📄 main.h

📁 Real Time Operating System for Hi-Tech C compiler.
💻 H
字号:
/************************************************************ 
Copyright (C) 1995-2002 Pumpkin, Inc. and its
Licensor(s). Freely distributable.

$Source: C:\\RCS\\D\\salvo\\demo\\d5\\main.h,v $
$Author: aek $
$Revision: 1.0 $
$Date: 2001-08-31 23:02:28-07 $

Header file for demo program.

************************************************************/

/************************************************************
****                                                     ****
**                                                         **
Default values for user-definable symbols and settings. 
Each and every symbol in this block can be changed to suit 
the user's preferences and/or requirements -- do this in
the project's d5cfg.h.

Tested at 10, 12.5, 16, and 20MHz for 1, 2, 3 and 4 1200bps 
rx/tx pairs, respectively, on PIC16F877 and equivalent. 
Approximately 4MHz higher clock speeds are required on
PIC18C452. Also works with other baud rates, e.g. one 
2400bps rx/tx pair at 20MHz, etc.

**                                                         **
****                                                     ****
************************************************************/
#ifndef XTAL
#define XTAL                20000000    /* Xtal freq    */
#endif

#ifndef BAUD
#define BAUD                1200        /* baud rate    */
#endif

#ifndef RECEIVERS
#define RECEIVERS           4           /* # s/w rcvrs  */
#endif

#ifndef TRANSMITTERS
#define TRANSMITTERS        4           /* # s/w xmtrs  */
#endif

#ifndef RX1_BUFF_SIZE
#define RX1_BUFF_SIZE       20          /* size of s/w  */
#endif                                  /*  rcvr buffer */
                                             
#ifndef RX2_BUFF_SIZE
#define RX2_BUFF_SIZE       20          /*  ""          */   
#endif

#ifndef RX3_BUFF_SIZE
#define RX3_BUFF_SIZE       20          /*  ""          */
#endif
      
#ifndef RX4_BUFF_SIZE
#define RX4_BUFF_SIZE       20          /*  ""          */  
#endif

#ifndef TX1_BUFF_SIZE
#define TX1_BUFF_SIZE       4           /* size of s/w  */   
#endif                                  /*  xmtr buffer */
                                             
#ifndef TX2_BUFF_SIZE
#define TX2_BUFF_SIZE       4           /*  ""          */
#endif

#ifndef TX3_BUFF_SIZE
#define TX3_BUFF_SIZE       4           /*  ""          */
#endif

#ifndef TX4_BUFF_SIZE
#define TX4_BUFF_SIZE       4           /*  ""          */
#endif

#ifndef RX5_BUFF_SIZE
#define RX5_BUFF_SIZE       10          /* size of h/w  */
#endif                                  /*  rcvr buffer */
                                     
#ifndef TX5_BUFF_SIZE
#define TX5_BUFF_SIZE       10          /* size of h/w  */
#endif                                  /*  xmtr buffer */

#ifndef RX1
#define RX1                 RB1         /* input pin    */
#endif

#ifndef RX2
#define RX2                 RB3         /*  ""          */
#endif

#ifndef RX3
#define RX3                 RB5         /*  ""          */
#endif

#ifndef RX4
#define RX4                 RB7         /*  ""          */
#endif

#ifndef TX1
#define TX1                 RB0         /* output pin   */
#endif

#ifndef TX2
#define TX2                 RB2         /*  ""          */
#endif

#ifndef TX3
#define TX3                 RB4         /*  ""          */
#endif

#ifndef TX4
#define TX4                 RB6         /*  ""          */  
#endif

#ifndef InitUARTTris()
#define InitUARTTris()      { TRISB = 0xAA; } /* must   */
#endif                                  /*  match  port */
                                        /*  bits defined*/
#ifndef InitUARTPort()                  /*  above       */
#define InitUARTPort()      { PORTB = 0xFF; } /* ""     */
#endif

#ifndef LOC_BUFF
#define LOC_BUFF            bank3       /* RAM bank for */
#endif                                  /*  s/w receiver*/
                                        /*  and xmitter */
                                        /*  buffers.    */
#ifndef LOC_BCB
#define LOC_BCB             bank2       /* RAM bank for */
#endif                                  /*  s/w receiver*/
                                        /*  and xmitter */
                                        /*  buffer ctrl */
                                        /*  blocks.     */    
#ifndef LOC_RX5
#define LOC_RX5             bank2       /* RAM bank for */
#endif                                  /*  UART's      */
                                        /*  receiver    */
                                        /*  buffer, etc.*/            
#ifndef LOC_TX5
#define LOC_TX5             bank2       /* RAM bank for */
#endif                                  /*  UART's      */
                                        /*  transmitter */
                                        /*  buffer, etc.*/            
#ifndef LOC_RX_LOCALS
#define LOC_RX_LOCALS       bank2       /* RAM bank for */
#endif                                  /*  Rx tasks'   */
                                        /*  static local*/
                                        /*  variables.  */                        
#ifndef LOC_INT_LOCALS
#define LOC_INT_LOCALS      bank2       /* RAM bank for */
#endif                                  /*  ISR's       */
                                        /*  static local*/
                                        /*  variables.  */
#ifndef LOC_TEST_VARS
#define LOC_TEST_VARS       bank2       /* RAM bank for */
#endif                                  /*  test code   */
                                        /*  variables   */
#ifndef ENABLE_TEST_CODE
#define ENABLE_TEST_CODE    1           /* 1 or 0       */        
#endif

#ifndef ENABLE_TEST_PINS
#define ENABLE_TEST_PINS    1           /*  ""          */  
#endif

#ifndef RUN_TEST_CODE_TASK
#define RUN_TEST_CODE_TASK  1           /*  ""          */
#endif

                    
/************************************************************
****                                                     ****
**                                                         **
Invalid configurations.

**                                                         **
****                                                     ****
************************************************************/
#if ( TRANSMITTERS < 0 ) || ( TRANSMITTERS > 4 )
#error This configuration not supported.
#endif

#if ( RECEIVERS < 0 ) || ( RECEIVERS > 4 )
#error This configuration not supported.
#endif

/************************************************************
****                                                     ****
**                                                         **
Normally a user wouldn't change any of these ...

**                                                         **
****                                                     ****
************************************************************/
/* taskID's for each sw UART task.                        */
#define TASKTESTCODE_TASKID 1
#define TASKTX_TASKID       2
#define TASKRX1_TASKID      3
#define TASKRX2_TASKID      4
#define TASKRX3_TASKID      5
#define TASKRX4_TASKID      6

/* task priorities for each sw UART task. Rx tasks need   */
/*  to be highest. A higher priority could be used for    */
/*  a dramatic error-handling task.                       */
#define TASKRX1_PRIO        1
#define TASKRX2_PRIO        2
#define TASKRX3_PRIO        3
#define TASKRX4_PRIO        4
#define TASKTX_PRIO         5
#define TASKTESTCODE_PRIO   6


/************************************************************
****                                                     ****
**                                                         **
Test code.

**                                                         **
****                                                     ****
************************************************************/
#if ENABLE_TEST_PINS
#define InitTestPins()      { TRISD &= 0x00; PORTD = 0x00; }
#define ToggleTPRx1SC()     { RD0 ^= 1; }
#define ToggleTPRx2SC()     { RD1 ^= 1; }
#define ToggleTPRx3SC()     { RD2 ^= 1; }
#define ToggleTPRx4SC()     { RD3 ^= 1; }
#define ToggleTPMain()      { RD4 ^= 1; }
#define ToggleTPIntDone()   { RD5 ^= 1; }
#define ToggleTPInt()       { RD6 ^= 1; }
#define ToggleTPTx()        { RD7 ^= 1; }

#else

#define InitTestPins()        
#define ToggleTPRx1SC()        
#define ToggleTPRx2SC()        
#define ToggleTPRx3SC()        
#define ToggleTPRx4SC()        
#define ToggleTPMain()        
#define ToggleTPIntDone()        
#define ToggleTPInt()            
#define ToggleTPTx()            

#endif


/************************************************************
****                                                     ****
**                                                         **
Target-specific #defines.

**                                                         **
****                                                     ****
************************************************************/
#define DisableTMR1()       { TMR1ON = 0; }
#define EnableTMR1()        { TMR1ON = 1; }
                                
/* for use with 1:8 postscalar with 1/4-bit resolution.    */
#define TMR2_RELOAD         (XTAL/BAUD)/(4*8*4)      



#define INT_TIME            QUARTER_BIT_TIME
#define ONE_SEC             1000000  /* in microseconds    */
#define FULL_BIT_TIME       ONE_SEC/BAUD
#define QUARTER_BIT_TIME    ONE_SEC/BAUD/4
#define FULL_BIT_CYCLES     XTAL/BAUD/(4*1)
#define FULL_BIT_TICKS      (FULL_BIT_TIME)/(INT_TIME)

#define TASKTESTCODE_P      OSTCBP(TASKTESTCODE_TASKID)
#define TASKTX_P            OSTCBP(TASKTX_TASKID)
#define TASKRX1_P           OSTCBP(TASKRX1_TASKID)
#define TASKRX2_P           OSTCBP(TASKRX2_TASKID)
#define TASKRX3_P           OSTCBP(TASKRX3_TASKID)
#define TASKRX4_P           OSTCBP(TASKRX4_TASKID)

#define BINSEM_TXBUFF_P     OSECBP(1)
#define BINSEM_TXDONE_P     OSECBP(2)
#define BINSEM_TXSTART_P    OSECBP(3)

#define TXSTATE_IDLE        0
#define TXSTATE_START       1
#define TXSTATE_DATA0       2
#define TXSTATE_DATA1       3
#define TXSTATE_DATA2       4
#define TXSTATE_DATA3       5
#define TXSTATE_DATA4       6
#define TXSTATE_DATA5       7
#define TXSTATE_DATA6       8
#define TXSTATE_DATA7       9
#define TXSTATE_STOP        10
#define TXSTATE_DONE        11

#define RX1BCB              rxBcbArray[0]
#define RX2BCB              rxBcbArray[1]
#define RX3BCB              rxBcbArray[2]
#define RX4BCB              rxBcbArray[3]
#define TX1BCB              txBcbArray[0]
#define TX2BCB              txBcbArray[1]
#define TX3BCB              txBcbArray[2]
#define TX4BCB              txBcbArray[3]

#define RX1BCBP             &rxBcbArray[0]
#define RX2BCBP             &rxBcbArray[1]
#define RX3BCBP             &rxBcbArray[2]
#define RX4BCBP             &rxBcbArray[3]
#define TX1BCBP             &txBcbArray[0]
#define TX2BCBP             &txBcbArray[1]
#define TX3BCBP             &txBcbArray[2]
#define TX4BCBP             &txBcbArray[3]     



/* buffer control block */
struct bcb {
    unsigned char count;
    unsigned char inP;
    unsigned char outP;
    unsigned char size;
} 
typedef struct bcb typeBcb;


#define typeSize unsigned char
#define typeBuff unsigned char
#define typeBuffP LOC_BUFF typeBuff *
#define typeBcbP LOC_BCB typeBcb *


void TaskRx1(void);
void TaskRx2(void);
void TaskRx3(void);
void TaskRx4(void);
void TaskTx(void);

void InitUART(void);
void InitBcb(typeBcbP txBcbP, typeSize size);
unsigned char GetBuff(unsigned char * dataP,
                      typeBcbP        bcbP,
                      typeBuffP       buffP );
unsigned char GetRx5Buff(unsigned char * dataP);
unsigned char PutBuff(unsigned char data,
                      typeBcbP      bcbP,
                      typeBuffP     buffP );
unsigned char PutTx5Buff(unsigned char data);

#define GetRx1Buff(c) GetBuff(c, RX1BCBP, rx1Buff)
#define GetRx2Buff(c) GetBuff(c, RX2BCBP, rx2Buff)
#define GetRx3Buff(c) GetBuff(c, RX3BCBP, rx3Buff)
#define GetRx4Buff(c) GetBuff(c, RX4BCBP, rx4Buff)
#define GetTx1Buff(c) GetBuff(c, TX1BCBP, tx1Buff)
#define GetTx2Buff(c) GetBuff(c, TX2BCBP, tx2Buff)
#define GetTx3Buff(c) GetBuff(c, TX3BCBP, tx3Buff)
#define GetTx4Buff(c) GetBuff(c, TX4BCBP, tx4Buff)
#define PutRx1Buff(c) PutBuff(c, RX1BCBP, rx1Buff)
#define PutRx2Buff(c) PutBuff(c, RX2BCBP, rx2Buff)
#define PutRx3Buff(c) PutBuff(c, RX3BCBP, rx3Buff)
#define PutRx4Buff(c) PutBuff(c, RX4BCBP, rx4Buff)
#define PutTx1Buff(c) PutBuff(c, TX1BCBP, tx1Buff)
#define PutTx2Buff(c) PutBuff(c, TX2BCBP, tx2Buff)
#define PutTx3Buff(c) PutBuff(c, TX3BCBP, tx3Buff)
#define PutTx4Buff(c) PutBuff(c, TX4BCBP, tx4Buff)

#define putch(a) putchar(a)


#ifndef MAIN_C_INCLUDES

extern LOC_INT_LOCALS unsigned char txState;
extern unsigned char tx1Data;
extern unsigned char tx2Data;
extern unsigned char tx3Data;
extern unsigned char tx4Data;

extern LOC_INT_LOCALS unsigned int rx1Timestamp;
extern LOC_INT_LOCALS unsigned int rx2Timestamp;
extern LOC_INT_LOCALS unsigned int rx3Timestamp;
extern LOC_INT_LOCALS unsigned int rx4Timestamp;

extern LOC_RX5 unsigned char rx5Count;
extern LOC_RX5 unsigned char rx5InP, rx5OutP;
extern LOC_RX5 unsigned char rx5Buff[];
extern LOC_TX5 unsigned char tx5Count;
extern LOC_TX5 unsigned char tx5InP, tx5OutP;
extern LOC_TX5 unsigned char tx5Buff[];

extern LOC_INT_LOCALS struct {                                        
    unsigned char tx1Active:1;            
    unsigned char tx2Active:1;            
    unsigned char tx3Active:1;            
    unsigned char tx4Active:1;            
    } txStatus;
    
extern LOC_INT_LOCALS struct {                                        
    unsigned char rx1Error:1;            
    unsigned char rx2Error:1;            
    unsigned char rx3Error:1;            
    unsigned char rx4Error:1;            
    unsigned char rx1Active:1;            
    unsigned char rx2Active:1;            
    unsigned char rx3Active:1;            
    unsigned char rx4Active:1;            
    } rxStatus;
    
extern LOC_BUFF typeBuff rx1Buff[RX1_BUFF_SIZE];
extern LOC_BUFF typeBuff rx2Buff[RX2_BUFF_SIZE];
extern LOC_BUFF typeBuff rx3Buff[RX3_BUFF_SIZE];
extern LOC_BUFF typeBuff rx4Buff[RX4_BUFF_SIZE];
extern LOC_BUFF typeBuff tx1Buff[TX1_BUFF_SIZE];
extern LOC_BUFF typeBuff tx2Buff[TX2_BUFF_SIZE];
extern LOC_BUFF typeBuff tx3Buff[TX3_BUFF_SIZE];
extern LOC_BUFF typeBuff tx4Buff[TX4_BUFF_SIZE];


extern LOC_BCB typeBcb rxBcbArray[4];
extern LOC_BCB typeBcb txBcbArray[4];
    
extern LOC_RX5 unsigned char rx5Count;
extern LOC_RX5 unsigned char rx5InP, rx5OutP;
extern LOC_RX5 unsigned char rx5Buff[];
extern LOC_RX5 unsigned char tx5Count;
extern LOC_RX5 unsigned char tx5InP, tx5OutP;
extern LOC_RX5 unsigned char tx5Buff[];
    
#endif


⌨️ 快捷键说明

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