info:avr32_gpio_writing
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
info:avr32_gpio_writing [2009/04/28 08:47] – tomgee | info:avr32_gpio_writing [2009/04/29 09:59] (current) – tomgee | ||
---|---|---|---|
Line 41: | Line 41: | ||
If you just want to toggle one or more bits use | If you just want to toggle one or more bits use | ||
OVRT = Bit(x); and this bit has the inverted level without influencing the others during that operation. | OVRT = Bit(x); and this bit has the inverted level without influencing the others during that operation. | ||
- | If you want to set some bits to a specific value like for your display port you can also use toggle instead of clearing all and setting the used once like | + | If you want to set some bits to a specific value like for your display port you can also use toggle instead of clearing all and setting the used ones like |
OVRT = (OVR & AllBitMask) ^ (NewValue << Offset); | OVRT = (OVR & AllBitMask) ^ (NewValue << Offset); | ||
- | Here you used the read function as well as the toggle function and set all bits simultaneously. Independent | + | Here you used the read function as well as the toggle function and set all bits simultaneously, independent |
The GPER(S/C/T) is used logically the some way to use a port pin as a port pin or not. If you clear it the port pin is connected to one of the internal modules like USART, TWI, SPI or Timer. You have to set GPER to use a port pin as a port pin. But don't forget to set the output driver too. Otherwise you have a port pin but you output value is not driven. | The GPER(S/C/T) is used logically the some way to use a port pin as a port pin or not. If you clear it the port pin is connected to one of the internal modules like USART, TWI, SPI or Timer. You have to set GPER to use a port pin as a port pin. But don't forget to set the output driver too. Otherwise you have a port pin but you output value is not driven. | ||
If you want a pure output you should also clear the ODMER otherwise you have an open drain driver if the device is populated with it.\\ | If you want a pure output you should also clear the ODMER otherwise you have an open drain driver if the device is populated with it.\\ | ||
And last but not least you should also clear the PUER to keep your power consumption low. | And last but not least you should also clear the PUER to keep your power consumption low. | ||
+ | |||
+ | ===== Setting Clock ===== | ||
+ | |||
+ | pm_freq_param_t osc; | ||
+ | osc.cpu_f = 66000000; | ||
+ | osc.osc0_f = FOSC0; | ||
+ | osc.osc0_startup = FOSC0_STARTUP; | ||
+ | osc.pba_f = 33000000; | ||
+ | pm_configure_clocks(& | ||
+ | |||
+ | |||
+ | You can set and reset the port pins directly. Here is an example for PORTB: | ||
+ | Code: | ||
+ | volatile avr32_gpio_port_t *gpio_port_b = ( volatile avr32_gpio_port_t * ) & | ||
+ | |||
+ | gpio_port_b-> | ||
+ | gpio_port_b-> | ||
+ | |||
+ | |||
+ | ===== Setting PIO Faster ===== | ||
+ | |||
+ | This is faster, because you don't have to call a function (saving and restoring of all registers => stack). | ||
+ | |||
+ | If you want to set or reset a pin of PORTA: | ||
+ | |||
+ | volatile avr32_gpio_port_t *gpio_port_a = ( volatile avr32_gpio_port_t * ) & | ||
+ | |||
+ | gpio_port_a-> | ||
+ | gpio_port_a-> | ||
+ | |||
+ | |||
+ | You can also set or reset more than one pin at the same time. |
info/avr32_gpio_writing.1240922875.txt.gz · Last modified: 2009/04/28 08:47 by tomgee