/*! \file warp_userioboard_util.h \brief Header file for User I/O Board utility code */ #include "warp_fpga_board.h" //Function prototypes void warp_userioboard_lcd_init(unsigned char slotNumber, unsigned char invertColors); int warp_userio_lcd_print(unsigned char* chars, unsigned char numChars, unsigned char line, unsigned char col, unsigned char charBuf); int warp_userio_lcd_displayCFimage(const char* filename); void warp_userioboard_buzzer_set(unsigned int period, unsigned int enable_thresh); /************ START LCD Controller ********************/ #ifdef WARP_FPGA_BOARD_V1_2 //Macros that wrap functions #define warp_userio_lcd_printline(chars, numChars, line, charBuf) warp_userio_lcd_print(chars, numChars, line, 0, charBuf) //Shortcuts for register writes #define warp_userioboard_set_lcd_charbuf(c) XIo_Out32(XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_CHARACTERSSELECT, c) //Shortcuts for memory locations // Each character sub-buffer is 16x16 chars (corresponding to the 256 character blocks on the screen) #define warp_userioboard_get_lcd_charbufaddr(c) (XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_CHARACTERS + c*256*sizeof(char)) //Shortcuts of the LCD controller shared memory buffers #define LCD_CHAR_BUFFER XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_CHARACTERS #define LCD_CHARMAP_BUFFER XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_CHARACTERMAP #define LCD_COMMAND_BUFFER XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_COMMANDS /************ Other I/O ********************/ #define warp_userioboard_set_leds(c) XIo_Out32(XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LEDS, 0xFF&c) #define warp_userioboard_set_buzzer_en(c) XIo_Out32(XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_BUZZER_ENABLE, 0x1&c) //Shortcuts for register reads #define warp_userioboard_get_leds() XIo_In32(XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LEDS) #define warp_userioboard_get_trackball() XIo_In32(XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_TRACKBALL) #define warp_userioboard_get_dipsw() XIo_In32(XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_DIP_SWITCH) #define warp_userioboard_get_smallbuttons() XIo_In32(XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_BUTTONS_SMALL) #define warp_userioboard_get_bigbuttons() XIo_In32(XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_BUTTONS_BIG) #define USER_IO_BOARD_CONTROLLER_LCD_RESETLCD XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_RESETLCD #define USER_IO_BOARD_CONTROLLER_LCD_BACKGROUNDCOLOR XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_BACKGROUNDCOLOR #define USER_IO_BOARD_CONTROLLER_LCD_CHARACTERSSELECT XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_CHARACTERSSELECT #define USER_IO_BOARD_CONTROLLER_LCD_COLSET XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_COLSET #define USER_IO_BOARD_CONTROLLER_LCD_CONFIGLOCATION XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_CONFIGLOCATION #define USER_IO_BOARD_CONTROLLER_LCD_DIVIDERSELECT XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_DIVIDERSELECT #define USER_IO_BOARD_CONTROLLER_LCD_FIRSTEND XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_FIRSTEND #define USER_IO_BOARD_CONTROLLER_LCD_FIRSTSTART XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_FIRSTSTART #define USER_IO_BOARD_CONTROLLER_LCD_RAMWRITE XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_RAMWRITE #define USER_IO_BOARD_CONTROLLER_LCD_ROWSET XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_ROWSET #define USER_IO_BOARD_CONTROLLER_LCD_SECONDEND XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_SECONDEND #define USER_IO_BOARD_CONTROLLER_LCD_SECONDSTART XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_SECONDSTART #define USER_IO_BOARD_CONTROLLER_LCD_SEND XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_SEND #define USER_IO_BOARD_CONTROLLER_LCD_TOTALCMDTRANSFER XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_TOTALCMDTRANSFER #define USER_IO_BOARD_CONTROLLER_LCD_RESET XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_RESET #define USER_IO_BOARD_CONTROLLER_LCD_TOTALCMDTRANSFER XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_TOTALCMDTRANSFER #define USER_IO_BOARD_CONTROLLER_LCD_SEND XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_SEND #define USER_IO_BOARD_CONTROLLER_LCD_RESET XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_LCD_RESET #define USER_IO_BOARD_CONTROLLER_BUZZER_PERIOD XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_BUZZER_PERIOD #define USER_IO_BOARD_CONTROLLER_BUZZER_DUTYCYCLE XPAR_USER_IO_BOARD_CONTROLLER_PLBW_0_MEMMAP_BUZZER_DUTYCYCLE #elif defined WARP_FPGA_BOARD_V2_1 //Macros that wrap functions #define warp_userio_lcd_printline(chars, numChars, line, charBuf) warp_userio_lcd_print(chars, numChars, line, 0, charBuf) //Shortcuts for register writes #define warp_userioboard_set_lcd_charbuf(c) XIo_Out32(XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_CHARACTERSSELECT, c) //Shortcuts for memory locations // Each character sub-buffer is 16x16 chars (corresponding to the 256 character blocks on the screen) #define warp_userioboard_get_lcd_charbufaddr(c) (XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_CHARACTERS + c*256*sizeof(char)) //Shortcuts of the LCD controller shared memory buffers #define LCD_CHAR_BUFFER XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_CHARACTERS #define LCD_CHARMAP_BUFFER XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_CHARACTERMAP #define LCD_COMMAND_BUFFER XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_COMMANDS /************ Other I/O ********************/ #define warp_userioboard_set_leds(c) XIo_Out32(XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LEDS, 0xFF&c) #define warp_userioboard_set_buzzer_en(c) XIo_Out32(XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_BUZZER_ENABLE, 0x1&c) //Shortcuts for register reads #define warp_userioboard_get_leds() XIo_In32(XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LEDS) #define warp_userioboard_get_trackball() XIo_In32(XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_TRACKBALL) #define warp_userioboard_get_dipsw() XIo_In32(XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_DIP_SWITCH) #define warp_userioboard_get_smallbuttons() XIo_In32(XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_BUTTONS_SMALL) #define warp_userioboard_get_bigbuttons() XIo_In32(XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_BUTTONS_BIG) #define USER_IO_BOARD_CONTROLLER_LCD_RESETLCD XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_RESETLCD #define USER_IO_BOARD_CONTROLLER_LCD_BACKGROUNDCOLOR XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_BACKGROUNDCOLOR #define USER_IO_BOARD_CONTROLLER_LCD_CHARACTERSSELECT XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_CHARACTERSSELECT #define USER_IO_BOARD_CONTROLLER_LCD_COLSET XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_COLSET #define USER_IO_BOARD_CONTROLLER_LCD_CONFIGLOCATION XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_CONFIGLOCATION #define USER_IO_BOARD_CONTROLLER_LCD_DIVIDERSELECT XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_DIVIDERSELECT #define USER_IO_BOARD_CONTROLLER_LCD_FIRSTEND XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_FIRSTEND #define USER_IO_BOARD_CONTROLLER_LCD_FIRSTSTART XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_FIRSTSTART #define USER_IO_BOARD_CONTROLLER_LCD_RAMWRITE XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_RAMWRITE #define USER_IO_BOARD_CONTROLLER_LCD_ROWSET XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_ROWSET #define USER_IO_BOARD_CONTROLLER_LCD_SECONDEND XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_SECONDEND #define USER_IO_BOARD_CONTROLLER_LCD_SECONDSTART XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_SECONDSTART #define USER_IO_BOARD_CONTROLLER_LCD_SEND XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_SEND #define USER_IO_BOARD_CONTROLLER_LCD_TOTALCMDTRANSFER XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_TOTALCMDTRANSFER #define USER_IO_BOARD_CONTROLLER_LCD_RESET XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_RESET #define USER_IO_BOARD_CONTROLLER_LCD_TOTALCMDTRANSFER XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_TOTALCMDTRANSFER #define USER_IO_BOARD_CONTROLLER_LCD_SEND XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_SEND #define USER_IO_BOARD_CONTROLLER_LCD_RESET XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_LCD_RESET #define USER_IO_BOARD_CONTROLLER_BUZZER_PERIOD XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_BUZZER_PERIOD #define USER_IO_BOARD_CONTROLLER_BUZZER_DUTYCYCLE XPAR_USER_IO_BOARD_CONTROLLER_SLOT1_MEMMAP_BUZZER_DUTYCYCLE #endif //Don't include the initialization command sequence by default (it's in hardware already) #define INCLUDE_LCD_INIT_CODE 0 //The LCD controller IC defines a set of commands used to setup/control the LCD from code // These commands are taken from the datasheet http://www.sparkfun.com/datasheets/LCD/S1D15G10D08BE_TM_MF1493_03.pdf #define LCDCMD_DISON 0x01af #define LCDCMD_DISOFF 0x01ae #define LCDCMD_DISNOR 0x01a6 #define LCDCMD_DISINV 0x01a7 #define LCDCMD_COMSCN 0x01bb #define LCDCMD_DISCTL 0x01ca #define LCDCMD_SLPIN 0x0195 #define LCDCMD_SLPOUT 0x0194 #define LCDCMD_PASET 0x0175 #define LCDCMD_CASET 0x0115 #define LCDCMD_DATCTL 0x01bc #define LCDCMD_RGBSET8 0x01ce #define LCDCMD_RAMWR 0x015c #define LCDCMD_RAMRD 0x015d #define LCDCMD_PTLIN 0x01a8 #define LCDCMD_PTLOUT 0x01a9 #define LCDCMD_RMWIN 0x01e0 #define LCDCMD_RMWOUT 0x01ee #define LCDCMD_ASCSET 0x01aa #define LCDCMD_SCSTART 0x01ab #define LCDCMD_OSCON 0x01d1 #define LCDCMD_OSCOFF 0x01d2 #define LCDCMD_PWRCTR 0x0120 #define LCDCMD_VOLCTR 0x0181 #define LCDCMD_VOLUP 0x01d6 #define LCDCMD_VOLDOWN 0x01d7 #define LCDCMD_TMPGRD 0x0182 #define LCDCMD_EPCTIN 0x01cd #define LCDCMD_EPCOUT 0x01cc #define LCDCMD_EPMWR 0x01fc #define LCDCMD_EPMRD 0x01fd #define LCDCMD_EPSRRD1 0x017c #define LCDCMD_EPSRRD2 0x017d #define LCDCMD_NOP 0x0125 /************ END LCD Controller ********************/ //The orientations used in the #defines below assume a user I/O board in slot 1 or 2 // If mounted in slots 3 or 4, orientations will need to be rotated 180 degrees //Bit masks for the trackball inputs; each "click" when rolling the trackball corresponds to a switch closing, then opening #define TRACKBALL_LEFT 0x01 #define TRACKBALL_RIGHT 0x02 #define TRACKBALL_UP 0x04 #define TRACKBALL_DOWN 0x08 #define TRACKBALL_PUSH 0x10 //Bit masks for the small push buttons (the six along the LCD's left edge) #define PB_SMALL_0 0x01 #define PB_SMALL_1 0x02 #define PB_SMALL_2 0x04 #define PB_SMALL_3 0x08 #define PB_SMALL_4 0x10 #define PB_SMALL_5 0x20 //Bit masks for the two large push buttons (under the trackball) #define PB_BIG_0 0x1 #define PB_BIG_1 0x2 //Bit masks for the ring of 8 LEDs; the "south" LED is nearest the trackball #define LED_N 0x01 #define LED_NW 0x02 #define LED_W 0x04 #define LED_SW 0x08 #define LED_S 0x10 #define LED_SE 0x20 #define LED_E 0x40 #define LED_NE 0x80