 |
EPPL
0.1 alpha
|
|
Go to the documentation of this file.
39 #ifndef EPPL_AVR8_REINIT_H_INCLUDED
40 #define EPPL_AVR8_REINIT_H_INCLUDED
61 #define EPPL_avr8_reinit_isPORTSET(param, bit) ( (EPPL_PORTNR(bit) == param) && EPPL_avr8_mode_modifiedReg(PORT, EPPL_GRfrom(bit), EPPL_GRto(bit)) && EPPL_avr8_mode_valuePORT(EPPL_GRto(bit)) )
66 #define EPPL_avr8_reinit_isPORTCLR(param, bit) ( (EPPL_PORTNR(bit) == param) && EPPL_avr8_mode_modifiedReg(PORT, EPPL_GRfrom(bit), EPPL_GRto(bit)) && !EPPL_avr8_mode_valuePORT(EPPL_GRto(bit)) )
71 #define EPPL_avr8_reinit_isPORTCHANGE(param, bit) ( (EPPL_PORTNR(bit) == param) && EPPL_avr8_mode_modifiedReg(PORT, EPPL_GRfrom(bit), EPPL_GRto(bit)) )
76 #define EPPL_avr8_reinit_isPORTUNSAFE(param, bit) ( (EPPL_PORTNR(bit) == param) && ( !EPPL_avr8_mode_knownPORT(EPPL_GRto(bit)) || EPPL_avr8_mode_modifiedReg(PORT, EPPL_GRfrom(bit), EPPL_GRto(bit)) ) )
82 #define EPPL_avr8_reinit_isDDRSET(param, bit) ( (EPPL_PORTNR(bit) == param) && EPPL_avr8_mode_modifiedReg(DDR, EPPL_GRfrom(bit), EPPL_GRto(bit)) && EPPL_avr8_mode_valueDDR(EPPL_GRto(bit)) )
87 #define EPPL_avr8_reinit_isDDRCLR(param, bit) ( (EPPL_PORTNR(bit) == param) && EPPL_avr8_mode_modifiedReg(DDR, EPPL_GRfrom(bit), EPPL_GRto(bit)) && !EPPL_avr8_mode_valueDDR(EPPL_GRto(bit)) )
92 #define EPPL_avr8_reinit_isDDRCHANGE(param, bit) ( (EPPL_PORTNR(bit) == param) && EPPL_avr8_mode_modifiedReg(DDR, EPPL_GRfrom(bit), EPPL_GRto(bit)) )
97 #define EPPL_avr8_reinit_isDDRUNSAFE(param, bit) ( (EPPL_PORTNR(bit) == param) && ( !EPPL_avr8_mode_knownDDR(EPPL_GRto(bit)) || EPPL_avr8_mode_modifiedReg(DDR, EPPL_GRfrom(bit), EPPL_GRto(bit)) ) )
109 #define EPPL_avr8_ReinitIsAtomicAccessReg(reg, port, pinconfigs...) \
111 (0 == EPPL_GETSUBSET(EPPL_avr8_reinit_is##reg##CHANGE, port, EPPL_extractPinPos, |, pinconfigs)) || \
112 (0xff == EPPL_GETSUBSET(EPPL_avr8_reinit_is##reg##CHANGE, port, EPPL_extractPinPos, |, pinconfigs)) || \
113 ((1 == EPPL_GETSUBSET(EPPL_avr8_reinit_is##reg##CHANGE, port, EPPL_extractOne, +, pinconfigs)) && EPPL_avr8_CheckRegSupportsBit(EPPL_avr8_CPORTREG(reg, port))) \
121 #define EPPL_avr8_ReinitIsAtomic(port, pinconfigs...) \
123 EPPL_avr8_ReinitIsAtomicAccessReg(PORT, port, pinconfigs) && \
124 EPPL_avr8_ReinitIsAtomicAccessReg(DDR, port, pinconfigs) \
142 #define eppl_avr8_ReinitReg(reg, port, pinconfigs...) \
145 if(0 == EPPL_GETSUBSET(EPPL_avr8_reinit_is##reg##CHANGE, port, EPPL_extractPinPos, |, pinconfigs)) \
148 if(0xff == EPPL_GETSUBSET(EPPL_avr8_reinit_is##reg##CHANGE, port, EPPL_extractPinPos, |, pinconfigs)) { \
149 *EPPL_avr8_CPORTREG(reg, port) = EPPL_GETSUBSET(EPPL_avr8_reinit_is##reg##SET, port, EPPL_extractPinPos, |, pinconfigs); \
152 else if((1 == EPPL_GETSUBSET(EPPL_avr8_reinit_is##reg##CHANGE, port, EPPL_extractOne, +, pinconfigs)) && EPPL_avr8_CheckRegSupportsBit(EPPL_avr8_CPORTREG(reg, port))) \
154 if(0 != EPPL_GETSUBSET(EPPL_avr8_reinit_is##reg##SET, port, EPPL_extractPinPos, |, pinconfigs)) \
155 eppl_avr8_asm_sbi(EPPL_avr8_CPORTREG(reg, port), EPPL_GETSUBSET(EPPL_avr8_reinit_is##reg##SET, port, EPPL_extractPinNr, +, pinconfigs)); \
157 eppl_avr8_asm_cbi(EPPL_avr8_CPORTREG(reg, port), EPPL_GETSUBSET(EPPL_avr8_reinit_is##reg##CLR, port, EPPL_extractPinNr, +, pinconfigs)); \
161 *EPPL_avr8_CPORTREG(reg, port) = (*EPPL_avr8_CPORTREG(reg, port) | \
162 EPPL_GETSUBSET(EPPL_avr8_reinit_is##reg##SET, port, EPPL_extractPinPos, |, pinconfigs) ) & \
163 ~EPPL_GETSUBSET(EPPL_avr8_reinit_is##reg##CLR, port, EPPL_extractPinPos, |, pinconfigs); \
189 #define EPPL_avr8_ReinitIsSafe(port, pinconfigs...)\
192 !EPPL_GETSUBSET(EPPL_avr8_reinit_isDDRUNSAFE, port, EPPL_extractPinPos, |, EPPL_HOTPINS) || \
193 EPPL_avr8_ReinitIsAtomicAccessReg(DDR, port, pinconfigs) \
196 !EPPL_GETSUBSET(EPPL_avr8_reinit_isPORTUNSAFE, port, EPPL_extractPinPos, |, EPPL_HOTPINS) || \
197 EPPL_avr8_ReinitIsAtomicAccessReg(PORT, port, pinconfigs) \
208 #define eppl_avr8_ReinitOnePort(port, pinconfigs...) \
210 eppl_avr8_ReinitReg(PORT, port, pinconfigs); \
211 eppl_avr8_ReinitReg(DDR, port, pinconfigs); \