//*****************************************************************************
//
// pdc.h - Stellaris development board Peripheral Device Controller definitions
//         and prototypes.
//
// Copyright (c) 2005,2006 Luminary Micro, Inc.  All rights reserved.
//
// Software License Agreement
//
// Luminary Micro, Inc. (LMI) is supplying this software for use solely and
// exclusively on LMI's Stellaris Family of microcontroller products.
//
// The software is owned by LMI and/or its suppliers, and is protected under
// applicable copyright laws.  All rights are reserved.  Any use in violation
// of the foregoing restrictions may subject the user to criminal sanctions
// under applicable laws, as well as to civil liability for the breach of the
// terms and conditions of this license.
//
// THIS SOFTWARE IS PROVIDED "AS IS".  NO WARRANTIES, WHETHER EXPRESS, IMPLIED
// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.
// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR
// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
//
// This is part of revision 635 of the Stellaris Driver Library.
//
//*****************************************************************************

#ifndef __PDC_H__
#define __PDC_H__

#ifdef __cplusplus
extern "C"
{
#endif

//*****************************************************************************
//
// The registers within the peripheral device controller.
//
//*****************************************************************************
#define PDC_VER                 0x0         // Version register
#define PDC_CSR                 0x1         // Command/Status register
#define PDC_DSW                 0x4         // DIP Switch register
#define PDC_LED                 0x5         // LED register
#define PDC_LCD_CSR             0x6         // LCD Command/Status register
#define PDC_LCD_RAM             0x7         // LCD RAM register
#define PDC_GPXDAT              0x8         // GPIO X Data register
#define PDC_GPXDIR              0x9         // GPIO X Direction register
#define PDC_GPYDAT              0xA         // GPIO Y Data register
#define PDC_GPYDIR              0xB         // GPIO Y Direction register
#define PDC_GPZDAT              0xC         // GPIO Z Data register
#define PDC_GPZDIR              0xD         // GPIO Z Direction register

//*****************************************************************************
//
// Flags indicating a read or write to the peripheral device controller.
//
//*****************************************************************************
#define PDC_RD                  0x80        // PDC read command
#define PDC_WR                  0x00        // PDC write command

//*****************************************************************************
//
// LCD panel (Crystalfontz CFAH1602B) commands, RS = 0
//
//*****************************************************************************
#define LCD_CLEAR               0x01        // Clear display (0 fill DDRAM).
#define LCD_HOME                0x02        // Cursor home.
#define LCD_MODE                0x04        // Set entry mode (cursor dir)
#define LCD_ON                  0x08        // Set display, cursor, blinking
                                            // on/off
#define LCD_CUR                 0x10        // Cursor, display shift
#define LCD_IF                  0x20        // Set interface data length,
                                            // lines, font
#define LCD_CGADDR              0x40        // Set CGRAM AC address
#define LCD_DDADDR              0x80        // Set DDRAM AC address

//*****************************************************************************
//
// LCD Status bit
//
//*****************************************************************************
#define LCD_B_BUSY              0x80        // Busy flag.

//*****************************************************************************
//
// The GPIO port A pin numbers for the various SSI signals.
//
//*****************************************************************************
#define SSI_CS                  GPIO_PIN_3
#define PDC_CS                  GPIO_PIN_3
#define SSI_CLK                 GPIO_PIN_2
#define SSI_TX                  GPIO_PIN_5
#define SSI_RX                  GPIO_PIN_4

//*****************************************************************************
//
// Function Prototypes
//
//*****************************************************************************
extern void PDCInit(void);
extern unsigned char PDCRead(unsigned char ucAddr);
extern void PDCWrite(unsigned char ucAddr, unsigned char ucData);
extern unsigned char PDCDIPRead(void);
extern void PDCLEDWrite(unsigned char ucLED);
extern unsigned char PDCLEDRead(void);
extern void PDCLCDInit(void);
extern void PDCLCDBacklightOn(void);
extern void PDCLCDBacklightOff(void);
extern void PDCLCDClear(void);
extern void PDCLCDCreateChar(unsigned char ucChar, unsigned char *pucData);
extern void PDCLCDSetPos(unsigned char ucX, unsigned char ucY);
extern void PDCLCDWrite(const char *pcStr, unsigned long ulCount);
extern unsigned char PDCGPIODirRead(unsigned char ucIdx);
extern void PDCGPIODirWrite(unsigned char ucIdx, unsigned char ucValue);
extern unsigned char PDCGPIORead(unsigned char ucIdx);
extern void PDCGPIOWrite(unsigned char ucIdx, unsigned char ucValue);

#ifdef __cplusplus
}
#endif

#endif // __PDC_H__
