-
Notifications
You must be signed in to change notification settings - Fork 4
A Wiring-like Library for the Stellaris Launchpad
License
sultanqasim/Stellarino
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
/**************************STELLARINO USER GUIDE*************************/ Copyright (C) 2012-2015 Sultan Qasim Khan Stellarino is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. Stellarino is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with Stellarino. If not, see <http://www.gnu.org/licenses/>. /***************************ABOUT STELLARINO***************************/ Stellarino is a simple Wiring-like but incompatible interface library implemented in C for popular TI Stellaris and Tiva C series microntrollers, particularly those used in Launchpad boards. It is meant to facilitate the rapid creation of basic microcontroller firmware without the need to parse through thousands of pages in datasheets and other documentation. It uses syntax similar to Wiring to ease the introduction of newcomers familiar with the Arduino and similar boards to the Stellaris platform. Stellarino implements functions for configuration, delays, using timers, GPIO, analog input, PWM, controlling hobby-style servomotors, UART, and more. It was created using the TI StellarisWare Peripheral Driver Library. It thus requires StellarisWare and a suitable IDE, such as TI Code Composer Studio in order to function. Since Stellarino implements all basic functionality using the StellarisWare PDL with simple, easy to understand code, it also makes a good introductory example for use of the PDL. /***********************SUPPORTED MICROCONTROLLERS**********************/ - TI Stellaris LM4F120H5QR (Stellaris Launchpad) - TI Tiva C Series TM4C123GH6PM (Tiva C Series Launchpad) - Support for the TM4C1294NCPDT used in the Tiva C Series Connected Launchpad is coming soon /************************HOW TO BUILD STELLARINO************************/ On Linux and Mac: See gcc_instructions.txt On Windows: In order to build Stellarino, you must first build the TivaWare Peripheral Peripheral Driver Library for the Cortex M4F, contained within the CCS project driverlib, and have that project inside your CCS workspace. If you have not already done that, first do as follows: 1. In CCS, go to Project->Import Existing CCS Eclipse Project 2. Beside "Select search-directory" click on "Browse" 3. Browse to the root of your StellarisWare installation directory, select the folder called "driverlib", and hit OK. Two projects should be discovered in the box below. 4. Tick the project "driverlib" and make sure "Copy projects into workspace" is selected. Hit finish. 5. Open the driverlib project and hit build. You should be building the debug configuration. Once driverlib has been built within one's CCS workspace, one may proceed to import and build Stellarino. To build a release version of Stellarino, you will need to build a release version of driverlib. /***************************PIN MULTIPLEXING***************************/ Pin Possible Use(s) in Stellarino PA0 GPIO, UART0 RX PA1 GPIO, UART0 TX PA2 GPIO, SSI0 SCK PA3 GPIO, SSI0 SS PA4 GPIO, SSI0 MISO PA5 GPIO, SSI0 MOSI PA6 GPIO PA7 GPIO PB0 GPIO, PWM, UART1 RX PB1 GPIO, PWM, UART1 TX PB2 GPIO, PWM PB3 GPIO, PWM PB4 GPIO, PWM, ADC, SSI2 SCK PB5 GPIO, PWM, ADC, SSI2 SS PB6 GPIO, PWM, SSI2 MISO PB7 GPIO, PWM, SSI2 MOSI PC0 JTAG (Reserved) PC1 JTAG (Reserved) PC2 JTAG (Reserved) PC3 JTAG (Reserved) PC4 GPIO, PWM, UART4 RX PC5 GPIO, PWM, UART4 TX PC6 GPIO, PWM, UART3 RX PC7 GPIO, PWM, UART3 TX PD0 GPIO, PWM, ADC, SSI3 SCK PD1 GPIO, PWM, ADC, SSI3 SS PD2 GPIO, PWM, ADC, SSI3 MISO PD3 GPIO, PWM, ADC, SSI3 MOSI PD4 GPIO, UART6 RX PD5 GPIO, UART6 TX PD6 GPIO, UART2 RX PD7 GPIO, UART2 TX PE0 GPIO, ADC PE1 GPIO, ADC PE2 GPIO, ADC PE3 GPIO, ADC PE4 GPIO, ADC, UART5 RX PE5 GPIO, ADC, UART5 TX PE6 GPIO, UART7 RX PE7 GPIO, UART7 TX PF0 GPIO, PWM, SSI1 MISO // Also defined as SW2 PF1 GPIO, PWM, SSI1 MOSI // Also defined as RED_LED PF2 GPIO, PWM, SSI1 SCK // Also defined as BLUE_LED PF3 GPIO, PWM, SSI1 SS // Also defined as GREEN_LED PF4 GPIO, PWM // Also defined as SW1 PF5 GPIO PF6 GPIO PF7 GPIO /**************************GENERAL FUNCTIONS**************************/ void init(void); This function must be called at the beginning of main() in any program to configure the microcontroller to function with Stellarino. /**********************INPUT AND OUTPUT FUNCTIONS*********************/ NOTE: FOR ALL IO FUNCTIONS, PIN SHOULD BE SPECIFIED IN THE FORM PX#. For example, Port A Pin 0 would be PA0. Pin names in this form have been predefined as macros in the library. void pinMode(unsigned char pin, unsigned char mode); Configures the given pin for the given mode. mode should be one of the following (self-explanatory) macros: INPUT OUTPUT OUTPUT_OD // Open drain GPIO INPUT_PULLUP INPUT_PULLDOWN INPUT_ANALOG OUTPUT_PWM // 500 Hz PWM, customizable via stellarino.h OUTPUT_PWM_OD // Open drain PWM OUTPUT_SERVO // Standard servo pulses every 20 ms int digitalRead(unsigned char pin); Reads a pin configured as a digital input and returns 1 or 0 depending on whether the pin is HIGH or LOW. int analogRead(unsigned char pin); Uses the ADC to read the analog voltage on a pin configured for analog input. Returns a value from 0 to 4095. Reading takes 13 to 23 microseconds. void digitalWrite(unsigned char pin, short val); Writes a value to a pin configured for digital output. Please note that writing HIGH to an input pin will not give it pullup resistance. For pullup and pulldown, use the appropriate setting in pinMode. val can either be the macros HIGH or LOW (or the numbers 1 or 0) void analogWrite(unsigned char pin, short val); Sets the PWM duty cycle of a pin configured for PWM output. val is the duty cycle, from 0 to 255. 0 is always off, 255 is always on. void servoWrite(unsigned char pin, short val); Sets the pulse length in microseconds for a pin configured for servo pulse output. val is the pulse length in microseconds. val must be between 600 and 2400 microseconds. void pwmWrite(unsigned char pin, float frequency, float duty); Sets a pin to output PWM at the given frequency with the given duty cycle. The pin must first be set up for PWM output through pinMode(). After using this function on a pin, you may not use analogWrite on the same pin until pinMode is called to restore the pin configuration. frequency is the PWM output frequency in Hz. duty is the duty cycle. It must be a value between 0.0 and 1.0. unsigned long pulseIn(unsigned char pin, short val, unsigned long timeout); Waits for a pulse to begin on a GPIO input pin until timeout, and returns the length of the pulse in microseconds if a pulse is detected. This function supports pulses with lengths between 1 us and 7 minutes. val is the polarity of the pulse, HIGH or LOW (1 or 0) timeout is the time to wait for a pulse to begin, in microseconds /***************************TIMING FUNCTIONS**************************/ void delay(unsigned long nTime); Pause for nTime milliseconds. Supports pauses up to 5 days in length. void delayMicroseconds(unsigned long nTime); Pause for nTime microseconds. void resetMillis(void); Reset a timer that will measure elapsed time in milliseconds. unsigned long millis(void); Returns the elapsed time in milliseconds since the millisecond timer was last reset. This timer can count for up to almost 25 days. void resetMicros(void); unsigned long micros(void); Similar to above, but time is measured in microseconds instead of milliseconds. This timer can only count for 71 minutes. /****************************UART FUNCTIONS***************************/ Functions without the UART prefix use UART0, which is connected to the ICDI on the Launchpad. UART-prefixed functions can use any UART interface, from UART0 all the way to UART7. Just specify the appropriate UART number as an unsigned char. For example, to write a character to UART3, use the command UARTputc(3, mychar); Data on the ICDI UART is transmitted at 115200 baud by default, with 8 data bits and 1 stop bit. The baud rate can be changed through a call to the enableUART function. void enableUART(uint8_t UART, unsigned long baudRate); Enables the given UART, and configures it to run at the given baud rate. Any arbitrary baud rate may be used, however for reliable communication, baud rates of 1200000 or below are recommended. int32_t UARTgetBufferLevel(uint8_t UART); Returns the number of bytes present in the UART receive buffer. bool UARToverflow(uint8_t UART); Returns true if the UART receive buffer has overflowed. void UARTflushReceiveBuffer(uint8_t UART); Flushes all data in the UART receive buffer and resets the overflow flag. void puts(const char * str); void UARTputs(uint8_t UART, const char * str); Outputs the string str over UART. Please note that unlike the standard C implementation of puts, this DOES NOT automatically append a newline. char * gets(char * str, int num); char * UARTgets(uint8_t UART, char * str, int num); Reads a string over UART until a newline is detected or the requested number of characters have been read. str is a pointer to a character array (C-style string) to which the string is read. num is the maximum number of characters to read (including the string termination character '\0') void putc(char c); void UARTputc(uint8_t UART, char c); Outputs the character c over UART. void putln(void); void UARTputln(uint8_t UART); Outputs a CRLF newline over UART. char getc(void); char UARTgetc(uint8_t UART); Returns a character read over UART. Waits for a character if one is not yet available. The character is erased from the buffer once read. int peek(void); int UARTpeek(uint8_t UART); Returns the next character from the buffer without clearing it. Successive calls to peek() and peekBlocking, and the next call to getc() will return the same character. Returns -255 if the buffer is empty. char peekBlocking(void); char UARTpeekBlocking(uint8_t UART); Returns the next character from the buffer without clearing it. Successive calls to peek() and peekBlocking, and the next call to getc() will return the same character. Waits for a character if the buffer is empty. void puti(long i); void UARTputi(uint8_t UART, long i); Outputs the signed long integer i as a decimal. long geti(void); long UARTgeti(uint8_t UART); Gets a decimal signed long integer over UART and returns it. void putu(unsigned long u, uint8_t digits); void UARTputu(uint8_t UART, unsigned long u, uint8_t digits); Outputs the unsigned long integer u as a decimal. Adds leading zeroes or truncates as required to match given number of digits. digits is the number of digits desired. unsigned long getu(uint8_t digits); unsigned long UARTgetu(uint8_t UART, uint8_t digits); Gets a decimal unsigned long integer over UART and returns it. Reads up to a non numeric character or till the digit limit. digits is the maximum number of digits to read. void puth(unsigned long h, uint8_t digits); void UARTputh(uint8_t UART, unsigned long h, uint8_t digits); Outputs the unsigned long integer h as a hexadecimal. Adds leading zeroes or truncates as required to match given number of digits. digits is the number of digits desired. unsigned long geth(uint8_t digits); unsigned long UARTgeth(uint8_t UART, uint8_t digits); Gets a hexadecimal unsigned long integer over UART and returns it. Reads up to a non numeric character or till the digit limit. digits is the maximum number of digits to read. void putf(float f, uint8_t decimal); void UARTputf(uint8_t UART, float f, uint8_t decimal); Outputs the floating point number f to the given number of decimal places over UART. decimal is the number of decimal places to output. float getf(); float UARTgetf(uint8_t UART); Gets a floating point number over UART and returns it. This function does not accept numbers in scientific notation. /***************************SPI/SSI FUNCTIONS*************************/ void enableSPI(unsigned short SPINum, unsigned short wordLength, unsigned long dataRate); Enables the selected SPI, and configures it for a specified word length in bits at a data rate specified in Hz. The pins associated with the selected SPI will be configured for SPI. SPINum is the number of the SPI (0 to 3) wordLenth is the length of each word in bits dataRate is the transmission rate in Hz void SPIWrite(unsigned short SPINum, unsigned long data); Writes the given data to the selected SPI. SPINum is the number of the SPI data is the word to be transmitted unsigned long SPIRead(unsigned short SPINum); Reads a word from the selected SPI. Will wait for data if buffer empty. SPINum is the number of the SPI
About
A Wiring-like Library for the Stellaris Launchpad
Resources
License
Stars
Watchers
Forks
Packages 0
No packages published