Saner AVR Bitfield Headers
projects hardwareV2.0
Readme.txt
Actual readme is in AVRAugment_io.h header (generated from "avr bitfield pin header generator.py" ). Btw you are recommeded to add this for inclusion on top of sourcecode.
#include "./AVRAugment_io.h" // for SET_REG( REG_NAME , PIN , VALUE ) & GET_REG( REG_NAME , PIN )
/* This is for those who want a more self discriptive sourcecode */
// Port Register Alias (Definition from "Register Description" in various atmel microcontroller datasheet )
// ( x = port alphabet ) (Extra info http://www.zembedded.com/avr-registers-explained/ )
#define PINMODE DDR ; // DDRx : Data Direction Register (highBit=output::lowBit=input)
#define SETOUTPUT PORT ; // PORTx : PORT x data register (if"DDRxn"=highBit??highBit=drivenHigh::lowBit=drivenLow) (if"DDRxn"=lowBit??highBit=pullUp::lowBit=floatingPin)
#define READPIN PIN ; // PINx : Port x INput pins address (highBit=sensedHigh::lowBit=sensedLow)
// boolean preprocessor constants
#define HIGH 0x1
#define LOW 0x0
#define INPUT 0x0
#define OUTPUT 0x1
#define true 0x1
#define false 0x0
#define PULLUP 0x1
#define FLOATING 0x0
/* Reference Sheet for digital pins:: e.g:
# Write digital output high/low
"SET_REG(PINMODE,B3,OUTPUT)" --> "SET_REG(SETOUTPUT,B3,HIGH)"
"SET_REG(PINMODE,B3,OUTPUT)" --> "SET_REG(SETOUTPUT,B3,LOW)"
# Read digitial input (floating or with internal pullup resistor)
"SET_REG(PINMODE,B3,INPUT)" --> "SET_REG(SETOUTPUT,B3,PULLUP)" --> "GET_REG(READPIN,B3)"
"SET_REG(PINMODE,B3,INPUT)" --> "SET_REG(SETOUTPUT,B3,FLOATING)" --> "GET_REG(READPIN,B3)"
*/
internal readme
// Generated @ Sat 11-07-2015 03:17AM 48sec
/*
TITLE: AVR Augmentation for io.h
Purpose: Increase portability, Readability, Save time
AUTHOR: Brian Khuu
Version: V2.0
Objective of V2::
To basically allow for flexible usage of registers beyond whatever is defined in this.
e.g.
Instead of: SET_PORT( B1, 0xFF) --> Sets bit 1 @ PORTB to 1
Want something like: SET_REG(PORT, B1, OxFF)
This method is more intuitive as well. But works only if the naming convention by Atmel remains consistent in this format::
Register Location: < REGISTER TYPE NAME (e.g. DDR ) > < REGISTER LETTER > ( e.g. DDRB )
Pin Naming: < REGISTER LETTER > < Pin Number >
Thus what I would need to generate in masses is like this::
#define B1_BITMASK PB1
#define B1_NUMBER 1
#define B1_LETTER B
Assumption:
That you are using io.h (For avr MCU) and
that it splits IOs into banks of Port letters each with an word sized of pin numbers
e.g. ( PA5 -> Port A pin 5 . Is a macro within io.h )
Port letters Supported: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
Pin numbers Supported: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16
Also assumes that Pxn is defined, and that registers are named like DDRx or PINx or PORTx etc... (x=letter, n=number)
cite: initial inspiration from cinderblock "[CODE] [C] Simplifying PORT and DDR #defines for Portability
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=73829
cite: "GET" and "SET" macros from David Jahshan's game_console Template
Example blink code for the arduino UNO in C located in bottom of this header file
*/
~~~~~~~~~ EXAMPLE ~~~~~~~~~~~
// Example blink code for Arduino UNO 16MHz (atmega328p)
#define F_CPU 16000000UL // For delay.h to function
#include <avr/io.h> // PIN, DDR, PORT defs
#include <util/delay.h> //_delay_ms()
#include "./AVRAugment_io.h"
##define LED13 B5 // Only need to change this to swap pins
#define DDR_13 SET_REG( DDR, LED13, 0xFF ) //IN=0x00, OUT=0xFF
#define ON_13 SET_REG( PORT, LED13, 0xFF ) //LOW=0x00, HIGH=0xFF
#define OFF_13 SET_REG( PORT, LED13, 0x00 ) //LOW=0x00, HIGH=0xFF
int main(void)
{
DDR_13;
ON_13;
while(1)
{
_delay_ms(2000);
OFF_13;
_delay_ms(2000);
ON_13;
}
}
V1.1
minor fixes to readme, and regen all files
V1.0
This is some header file which is useful when coding for embedded AVR microprocessors.
TITLE: AVR Augmentation for io.h Purpose: Increase portability, Readability, Save time AUTHOR: Brian Khuu Version: V1.0
Assumption: That you are using io.h (For avr MCU) and that it splits IOs into banks of Port letters each with an word sized of pin numbers e.g. ( PA5 -> Port A pin 5 . Is a macro within io.h ) Port letters Supported: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P Pin numbers Supported: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16
cite: initial inspiration from cinderblock "[CODE] [C] Simplifying PORT and DDR #defines for Portability http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=73829 cite: "GET" and "SET" macros from David Jahshan's game_console Template
Example blink code for the arduino UNO in C located in bottom of this header file