📄 mod_regs_sci.h
字号:
// Baud rate values calculation, depending on peripheral clock (Pf)
// n is CKS setting (0-3)
// N = (Pf/(64*2^(2n-1)*B))-1
// With CYGARC_SCBRR_CKSx providing the values 1, 4, 16, 64 we get
// N = (Pf/(32*_CKS*B))-1
//
// The CYGARC_SCBRR_OPTIMAL_CKS macro should compute the minimal CKS
// setting for the given baud rate and peripheral clock.
//
// The error of the CKS+count value can be computed by:
// E(%) = ((Pf/((N+1)*B*(64^(n-1)))-1)*100
//
#define CYGARC_SCBRR_PRESCALE(_b_) \
((((CYGHWR_HAL_H8S_INTERNAL_MODULE_CLOCK/32/1/(_b_))-1)<256) ? 1 : \
(((CYGHWR_HAL_H8S_INTERNAL_MODULE_CLOCK/32/4/(_b_))-1)<256) ? 4 : \
(((CYGHWR_HAL_H8S_INTERNAL_MODULE_CLOCK/32/16/(_b_))-1)<256) ? 16 : 64)
//
// Add half the divisor to reduce rounding errors to .5
//
#define CYGARC_SCBRR_ROUNDING(_b_) \
16*CYGARC_SCBRR_PRESCALE(_b_)*(_b_)
//
// These two macros provide the static values we need to stuff into the
// registers.
//
#define CYGARC_SCBRR_CKSx(_b_) \
((1 == CYGARC_SCBRR_PRESCALE(_b_)) ? 0 : \
(4 == CYGARC_SCBRR_PRESCALE(_b_)) ? 1 : \
(16 == CYGARC_SCBRR_PRESCALE(_b_)) ? 2 : 3)
#define CYGARC_SCBRR_N(_b_) \
(((_b_) < 4800) ? 0 : \
((_b_) > 115200) ? 0 : \
(((CYGHWR_HAL_H8S_INTERNAL_MODULE_CLOCK+CYGARC_SCBRR_ROUNDING(_b_))/32/CYGARC_SCBRR_PRESCALE(_b_)/(_b_))-1))
#ifndef __ASSEMBLER__
//==========================================================================
// REGISTER STRUCTURE
//==========================================================================
struct st_sci { // struct SCI
union { // SMR
unsigned char BYTE; // Byte Access
struct { // Bit Access
unsigned char CA :1; // C/A
unsigned char CHR :1; // CHR
unsigned char _PE :1; // PE
unsigned char OE :1; // O/E
unsigned char STOP:1; // STOP
unsigned char MP :1; // MP
unsigned char CKS :2; // CKS
} BIT; //
} SMR; //
unsigned char BRR; // BRR
union { // SCR
unsigned char BYTE; // Byte Access
struct { // Bit Access
unsigned char TIE :1; // TIE
unsigned char RIE :1; // RIE
unsigned char TE :1; // TE
unsigned char RE :1; // RE
unsigned char MPIE:1; // MPIE
unsigned char TEIE:1; // TEIE
unsigned char CKE :2; // CKE
} BIT; //
} SCR; //
unsigned char TDR; // TDR
union { // SSR
unsigned char BYTE; // Byte Access
struct { // Bit Access
unsigned char TDRE:1; // TDRE
unsigned char RDRF:1; // RDRF
unsigned char ORER:1; // ORER
unsigned char FER :1; // FER
unsigned char PER :1; // PER
unsigned char TEND:1; // TEND
unsigned char MPB :1; // MPB
unsigned char MPBT:1; // MPBT
} BIT; //
} SSR; //
unsigned char RDR; // RDR
union { // SCMR
unsigned char BYTE; // Byte Access
struct { // Bit Access
unsigned char :4; //
unsigned char SDIR:1; // SDIR
unsigned char SINV:1; // SINV
unsigned char :1; //
unsigned char SMIF:1; // SMIF
} BIT; //
} SCMR; //
};
struct st_smci { // struct SMCI
union { // SMR
unsigned char BYTE; // Byte Access
struct { // Bit Access
unsigned char GM :1; // GM
unsigned char BLK:1; // BLK
unsigned char _PE:1; // PE
unsigned char OE :1; // O/E
unsigned char BCP:2; // BCP
unsigned char CKS:2; // CKS
} BIT; //
} SMR; //
unsigned char BRR; // BRR
union { // SCR
unsigned char BYTE; // Byte Access
struct { // Bit Access
unsigned char TIE :1; // TIE
unsigned char RIE :1; // RIE
unsigned char TE :1; // TE
unsigned char RE :1; // RE
unsigned char MPIE:1; // MPIE
unsigned char TEIE:1; // TEIE
unsigned char CKE :2; // CKE
} BIT; //
} SCR; //
unsigned char TDR; // TDR
union { // SSR
unsigned char BYTE; // Byte Access
struct { // Bit Access
unsigned char TDRE:1; // TDRE
unsigned char RDRF:1; // RDRF
unsigned char ORER:1; // ORER
unsigned char ERS :1; // ERS
unsigned char PER :1; // PER
unsigned char TEND:1; // TEND
unsigned char MPB :1; // MPB
unsigned char MPBT:1; // MPBT
} BIT; //
} SSR; //
unsigned char RDR; // RDR
union { // SCMR
unsigned char BYTE; // Byte Access
struct { // Bit Access
unsigned char :4; //
unsigned char SDIR:1; // SDIR
unsigned char SINV:1; // SINV
unsigned char :1; //
unsigned char SMIF:1; // SMIF
} BIT; //
} SCMR; //
};
//==========================================================================
// STRUCTURED REGISTER ACCESS
//==========================================================================
#define HAL_H8S_REG_SCI0 (*(volatile struct st_sci *)0xFFFF78) // SCI0 Address
#define HAL_H8S_REG_SCI1 (*(volatile struct st_sci *)0xFFFF80) // SCI1 Address
#define HAL_H8S_REG_SCI2 (*(volatile struct st_sci *)0xFFFF88) // SCI2 Address
#define HAL_H8S_REG_SMCI0 (*(volatile struct st_smci *)0xFFFF78) // SMCI0 Address
#define HAL_H8S_REG_SMCI1 (*(volatile struct st_smci *)0xFFFF80) // SMCI1 Address
#define HAL_H8S_REG_SMCI2 (*(volatile struct st_smci *)0xFFFF88) // SMCI2 Address
#endif // #ifndef __ASSEMBLER__
//---------------------------------------------------------------------------
#endif // end of #define CYGONCE_MOD_REGS_SCI_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -