Hanna
Sourcecode Batteriemanagementsystem
port_driver.c
gehe zur Dokumentation dieser Datei
1 
66 #include "port_driver.h"
67 
77 void IO_ConfigurePin( PORT_t * port, uint8_t pinMask, uint8_t slewRateEnable, uint8_t invertEnable,
78  PORT_OPC_t opc, PORT_ISC_t isc )
79 {
80  /* Build pin control register value. */
81  uint8_t temp = (uint8_t) opc |
82  isc |
83  (slewRateEnable ? PORT_SRLEN_bm : 0) |
84  (invertEnable ? PORT_INVEN_bm : 0);
85 
86  /* Configure the pins in one atomic operation. */
87 
88  /* Save status register. */
89  uint8_t sreg = SREG;
90 
91  cli();
92  PORTCFG.MPCMASK = pinMask;
93  port->PIN0CTRL = temp;
94 
95  /* Restore status register. */
96  SREG = sreg;
97  sei();
98 }
99 
100 
108 void IO_SetPinHigh( PORT_t * port, uint8_t pinMask ){
109  port->OUT |= pinMask;
110 }
111 
112 
121 void IO_SetPinLow( PORT_t * port, uint8_t pinMask ){
122  port->OUT &= ~pinMask;
123 }
124 
125 
133 void IO_SetPinAsOutput( PORT_t * port, uint8_t pinMask ){
134  port->DIR |= pinMask;
135 }
136 
145 void IO_SetPinAsOutput_InitHigh( PORT_t * port, uint8_t pinMask ){
146  port->DIR |= pinMask;
147  port->OUT |= pinMask;
148 }
149 
150 
151 
159 void IO_SetPinAsInput( PORT_t * port, uint8_t pinMask ){
160  port->DIR &= ~pinMask;
161 }
162 
163 bool IO_GetPinLevel( PORT_t * port, uint8_t pinMask )
164 {
165  return port->IN & pinMask;
166 }
167 
174 void IO_TogglePin( PORT_t * port, uint8_t pinMask )
175 {
176  port->OUTTGL = pinMask;
177 }
178 
179 
189 void IO_ConfigureInterrupt0( PORT_t * port,
190  PORT_INT0LVL_t intLevel,
191  uint8_t pinMask )
192 {
193  port->INTCTRL = ( port->INTCTRL & ~PORT_INT0LVL_gm ) | intLevel;
194  port->INT0MASK = pinMask;
195 }
196 
197 
207 void IO_ConfigureInterrupt1( PORT_t * port,
208  PORT_INT1LVL_t intLevel,
209  uint8_t pinMask )
210 {
211  port->INTCTRL = ( port->INTCTRL & ~PORT_INT1LVL_gm ) | intLevel;
212  port->INT1MASK = pinMask;
213 }
214 
215 
223 void IO_MapVirtualPort0(PORTCFG_VP02MAP_t realPort)
224 {
225  PORTCFG.VPCTRLA = ( PORTCFG.VPCTRLA & ~PORTCFG_VP0MAP_gm ) | realPort;
226 }
227 
228 
236 void IO_MapVirtualPort1(PORTCFG_VP13MAP_t realPort)
237 {
238  PORTCFG.VPCTRLA = ( PORTCFG.VPCTRLA & ~PORTCFG_VP1MAP_gm ) | realPort;
239 }
240 
241 
249 void IO_MapVirtualPort2(PORTCFG_VP02MAP_t realPort)
250 {
251  PORTCFG.VPCTRLB = ( PORTCFG.VPCTRLB & ~PORTCFG_VP2MAP_gm ) | realPort;
252 }
253 
254 
262 void IO_MapVirtualPort3(PORTCFG_VP13MAP_t realPort)
263 {
264  PORTCFG.VPCTRLB = ( PORTCFG.VPCTRLB & ~PORTCFG_VP3MAP_gm ) | realPort;
265 }
void IO_MapVirtualPort2(PORTCFG_VP02MAP_t realPort)
Maps a real port to virtual port 2.
Definition: port_driver.c:249
void IO_SetPinAsOutput(PORT_t *port, uint8_t pinMask)
This function configures a pin in an I/O port or virtual port as an output.
Definition: port_driver.c:133
void IO_ConfigureInterrupt0(PORT_t *port, PORT_INT0LVL_t intLevel, uint8_t pinMask)
Configures interrupt 0.
Definition: port_driver.c:189
void IO_MapVirtualPort3(PORTCFG_VP13MAP_t realPort)
Maps a real port to virtual port 3.
Definition: port_driver.c:262
void IO_SetPinHigh(PORT_t *port, uint8_t pinMask)
This function sets a bit in the OUT register of an I/O port or virtual port.
Definition: port_driver.c:108
XMEGA I/O Port driver header file.
void IO_MapVirtualPort1(PORTCFG_VP13MAP_t realPort)
Maps a real port to virtual port 1.
Definition: port_driver.c:236
void IO_SetPinLow(PORT_t *port, uint8_t pinMask)
This function clears a bit in the OUT register of an I/O port or virtual port.
Definition: port_driver.c:121
void IO_ConfigurePin(PORT_t *port, uint8_t pinMask, uint8_t slewRateEnable, uint8_t invertEnable, PORT_OPC_t opc, PORT_ISC_t isc)
This function changes the configuration of a set of pins.
Definition: port_driver.c:77
void IO_ConfigureInterrupt1(PORT_t *port, PORT_INT1LVL_t intLevel, uint8_t pinMask)
Configures interrupt 1.
Definition: port_driver.c:207
void IO_SetPinAsOutput_InitHigh(PORT_t *port, uint8_t pinMask)
This function configures a pin in an I/O port or virtual port as an output and sets the pin to high a...
Definition: port_driver.c:145
void IO_SetPinAsInput(PORT_t *port, uint8_t pinMask)
This function configures a pin in an I/O port or virtual port as an input.
Definition: port_driver.c:159
void IO_MapVirtualPort0(PORTCFG_VP02MAP_t realPort)
Maps a real port to virtual port 0.
Definition: port_driver.c:223
void IO_TogglePin(PORT_t *port, uint8_t pinMask)
Toggle the value of an IOPORT pin, which has previously been configured as an output.
Definition: port_driver.c:174