dolence 0 Posted March 13, 2014 Share Posted March 13, 2014 Hello everybody! My name is Willian and I'm coming from AVR microcontrollers. I confess I never had interest in Arduino in the past, always used avr-gcc/atmel studio. I'm trying to port Arduino code (3D printer controller) to Energia, without success. Since Arduino seens to be really slow, original developer used fastio macros to gain some speed. Those macros seens to not be compatible with Energia: 'PINB5' was not declared in this scope Marlin_main.cpp /Marlin line 2113 C/C++ Problem 'PORTB' was not declared in this scope Marlin_main.cpp /Marlin line 2126 C/C++ Problem Macro definitions are as follows: #ifndef _FASTIO_ARDUINO_H #define _FASTIO_ARDUINO_H //#include <avr/io.h> /* utility functions */ #ifndef MASK /// MASKING- returns \f$2^PIN\f$ #define MASK(PIN) (1 << PIN) #endif /* magic I/O routines now you can simply SET_OUTPUT(STEP); WRITE(STEP, 1); WRITE(STEP, 0); */ /// Read a pin #define _READ(IO) ((bool)(DIO ## IO ## _RPORT & MASK(DIO ## IO ## _PIN))) /// write to a pin // On some boards pins > 0x100 are used. These are not converted to atomic actions. An critical section is needed. #define _WRITE_NC(IO, v) do { if (v) {DIO ## IO ## _WPORT |= MASK(DIO ## IO ## _PIN); } else {DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }; } while (0) #define _WRITE_C(IO, v) do { if (v) { \ CRITICAL_SECTION_START; \ {DIO ## IO ## _WPORT |= MASK(DIO ## IO ## _PIN); }\ CRITICAL_SECTION_END; \ }\ else {\ CRITICAL_SECTION_START; \ {DIO ## IO ## _WPORT &= ~MASK(DIO ## IO ## _PIN); }\ CRITICAL_SECTION_END; \ }\ }\ while (0) #define _WRITE(IO, v) do { if (&(DIO ## IO ## _RPORT) >= (uint8_t *)0x100) {_WRITE_C(IO, v); } else {_WRITE_NC(IO, v); }; } while (0) /// toggle a pin #define _TOGGLE(IO) do {DIO ## IO ## _RPORT = MASK(DIO ## IO ## _PIN); } while (0) /// set pin as input #define _SET_INPUT(IO) do {DIO ## IO ## _DDR &= ~MASK(DIO ## IO ## _PIN); } while (0) /// set pin as output #define _SET_OUTPUT(IO) do {DIO ## IO ## _DDR |= MASK(DIO ## IO ## _PIN); } while (0) /// check if pin is an input #define _GET_INPUT(IO) ((DIO ## IO ## _DDR & MASK(DIO ## IO ## _PIN)) == 0) /// check if pin is an output #define _GET_OUTPUT(IO) ((DIO ## IO ## _DDR & MASK(DIO ## IO ## _PIN)) != 0) /// check if pin is an timer #define _GET_TIMER(IO) ((DIO ## IO ## _PWM) // why double up on these macros? see http://gcc.gnu.org/onlinedocs/cpp/Stringification.html /// Read a pin wrapper #define READ(IO) _READ(IO) /// Write to a pin wrapper #define WRITE(IO, v) _WRITE(IO, v) /// toggle a pin wrapper #define TOGGLE(IO) _TOGGLE(IO) /// set pin as input wrapper #define SET_INPUT(IO) _SET_INPUT(IO) /// set pin as output wrapper #define SET_OUTPUT(IO) _SET_OUTPUT(IO) /// check if pin is an input wrapper #define GET_INPUT(IO) _GET_INPUT(IO) /// check if pin is an output wrapper #define GET_OUTPUT(IO) _GET_OUTPUT(IO) /// check if pin is an timer wrapper #define GET_TIMER(IO) _GET_TIMER(IO) /* ports and functions added as necessary or if I feel like it- not a comprehensive list! */ Any help would be great. Thanks in advance! Quote Link to post Share on other sites
Rickta59 589 Posted March 13, 2014 Share Posted March 13, 2014 PINB5 is a reference to an AVR port peripheral, you need to use the msp430 peripherals names. Port1 on the msp430 would be Special Function Registers such as: P1DIR - to set directionP1OUT - to set an output bit P1IN - to read an input bit P1DIR |= BIT5; // set P1.5 direction to output, default is input P1OUT |= BIT5; // set value of P1.5 to high P1OUT &= ~BIT5; // set value of P1.5 to low if ( P1IN & BIT5) { P1.5 is high do something } -rick dolence 1 Quote Link to post Share on other sites
dolence 0 Posted March 13, 2014 Author Share Posted March 13, 2014 Rick, thank you very much! Late in the night, the obvious becomes not so obvious. I should have said that I'm using an LM4F120. I think SFR differs slightly from MSP430. This night I will try it again! Thank you again! Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.