📄 main.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 + -