Subversion Repositories Code-Repo

Compare Revisions

Ignore whitespace Rev 211 → Rev 212

/PIC Stuff/Cerebot_32MX7_LED_Cube/BTN.c
19,11 → 19,15
INTDisableInterrupts();
CNCONSET = 0x8000; // Turn on change notice interrupt
#if defined CEREBOT_32MX7
CNENSET = 0x80300; // Set interrupt on CN8/9/19
#elif defined CEREBOT_MX7CK
CNENSET = 0x00300; // Set interrupt on CN8/9
#endif
int tmp = BTN1_PORT;
tmp = BTN2_PORT;
tmp = BTN3_PORT;
IPC6SET = 0x50000; // Set priority level = 1, sub-priority level = 1
IPC6SET = 0xD0000; // Set priority level = 3, sub-priority level = 1
IFS1CLR = 0x1; // Clear interrupt flag
IEC1SET = 0x1; // Enable interrupt
 
30,7 → 34,7
INTEnableInterrupts();
}
 
void __ISR(_CHANGE_NOTICE_VECTOR, ipl1) __CN_Interrupt_Handler(void) {
void __ISR(_CHANGE_NOTICE_VECTOR, ipl3) __CN_Interrupt_Handler(void) {
// Upon interrupt, debounce input and call saved function
if (BTN1_PORT == 1) {
Delay_MS(BTN_DEBOUNCE_MS);
46,6 → 50,7
(*btn_data_ptr->callback_function_2)();
}
}
#ifdef CEREBOT_32MX7
if (BTN3_PORT == 1) {
Delay_MS(BTN_DEBOUNCE_MS);
if (BTN3_PORT == 1) {
53,5 → 58,6
(*btn_data_ptr->callback_function_3)();
}
}
#endif
IFS1CLR = 0x1; // Clear interrupt flag
}
/PIC Stuff/Cerebot_32MX7_LED_Cube/BTN.h
1,15 → 1,21
#ifndef BTN_H
#define BTN_H
 
// BTN1 = CN8, BTN2 = CN9, BTN3 = CN19
// BTN1 = RG6, BTN2 = RG7, BTN3 = RD13
// BTN1 = CN8, BTN2 = CN9, BTN3 = CN19 (32MX7 only)
// BTN1 = RG6, BTN2 = RG7, BTN3 = RD13 (32MX7 only)
// Note: Write to PORTx is effectively the same as write to LATx
#define BTN1_TRIS TRISGbits.TRISG6
#define BTN1_PORT PORTGbits.RG6
#define BTN2_TRIS TRISGbits.TRISG7
#define BTN2_PORT PORTGbits.RG7
 
#if defined CEREBOT_32MX7
#define BTN3_TRIS TRISDbits.TRISD13
#define BTN3_PORT PORTDbits.RD13
#elif defined CEREBOT_MX7CK
#define BTN3_TRIS TRISAbits.TRISA0
#define BTN3_PORT PORTAbits.RA0
#endif
 
#define BTN_DEBOUNCE_MS 1
 
/PIC Stuff/Cerebot_32MX7_LED_Cube/CUBE.c
18,6 → 18,8
cube_data_ptr = data;
cube_data_ptr->current_layer = 0;
cube_data_ptr->rotation_counter = 0;
cube_data_ptr->frame_state = IDLE;
cube_data_ptr->frame_escape = 0;
 
SFT_D = 0;
SFT_S = 0;
62,6 → 64,10
SPI1_Write(cube_data_ptr->GCS_WRITE[cube_data_ptr->current_layer], GCS_LAYER_SIZE, &Cube_GCS_Write_Callback);
}
 
////////////////////////
// Callback functions //
////////////////////////
 
void Cube_DCS_Write_Callback(void) {
// GSLAT must be >7ms after DCS write
Delay_MS(7);
101,6 → 107,10
? 0 : cube_data_ptr->current_layer + 1;
}
 
////////////////////////////
// Cube control functions //
////////////////////////////
 
void Cube_Write_DCS(char BC) {
XBLNK = 0;
int i,j;
431,6 → 441,9
}
}
 
///////////////////////////////
// Overlay control functions //
///////////////////////////////
 
void Cube_Overlay_Clear(void) {
int i,j;
662,6 → 675,9
}
}
 
////////////////////////////
// Text control functions //
////////////////////////////
 
void Cube_Text_Init(char *string, char length, int R, int G, int B) {
// Ensure that the length of the string does not exceed the storage buffer
715,4 → 731,73
} else {
cube_data_ptr->string_line += 1;
}
}
 
/////////////////////////////////////////////
// Functions for processing streaming data //
/////////////////////////////////////////////
 
void Cube_Data_In(char c) {
// Reset upon receiving the start char
if (c == CUBE_START_CHAR) {
cube_data_ptr->frame_length = 0;
cube_data_ptr->frame_index = 0;
cube_data_ptr->frame_checksum = 0;
cube_data_ptr->frame_command = 0;
cube_data_ptr->frame_state = READ_LENGTH_MSB;
} else {
// If the input is the escape char, XOR the next char received
if (c == CUBE_ESCAPE_CHAR) {
cube_data_ptr->frame_escape = 1;
return;
}
// XOR the input char if needed
if (cube_data_ptr->frame_escape) {
c ^= CUBE_ESCAPE_XOR;
cube_data_ptr->frame_escape = 0;
}
// Process data
switch (cube_data_ptr->frame_state) {
case READ_LENGTH_MSB: // Save MSB of length
cube_data_ptr->frame_length |= (c << 8);
cube_data_ptr->frame_state = READ_LENGTH_LSB;
break;
case READ_LENGTH_LSB: // Save LSB of length
cube_data_ptr->frame_length |= c;
cube_data_ptr->frame_state = READ_COMMAND;
break;
case READ_COMMAND: // Store the command byte
cube_data_ptr->frame_checksum += c;
cube_data_ptr->frame_command = c;
cube_data_ptr->frame_state = READ_DATA;
break;
case READ_DATA: // Read the passed data into the buffer
cube_data_ptr->frame_checksum += c;
cube_data_ptr->frame_buffer[cube_data_ptr->frame_index] = c;
cube_data_ptr->frame_index++;
if (cube_data_ptr->frame_index == cube_data_ptr->frame_length)
cube_data_ptr->frame_state = READ_CHECKSUM;
break;
case READ_CHECKSUM: // Process frame if checksum is valid
if (0xFF - (cube_data_ptr->frame_checksum && 0xFF) == c)
Cube_Data_In_Process_Frame();
cube_data_ptr->frame_state = IDLE;
break;
case IDLE:
default:
// Do nothing
break;
}
}
}
 
void Cube_Data_In_Process_Frame(void) {
char *frame = cube_data_ptr->frame_buffer;
switch (cube_data_ptr->frame_command) {
case CUBE_COMMAND_SET_PIXEL:
Cube_Set_Pixel(frame[0], frame[1], frame[2], frame[3], frame[4], frame[5]);
break;
default:
break;
}
}
/PIC Stuff/Cerebot_32MX7_LED_Cube/CUBE.h
1,6 → 1,7
#ifndef CUBE_H
#define CUBE_H
 
// Cube Parameters
#define CUBE_ROW_COUNT 8
#define CUBE_COLUMN_COUNT 8
#define CUBE_LAYER_COUNT 8
9,8 → 10,7
#define GCS_REG_SIZE 36
#define GCS_LAYER_SIZE (GCS_REG_SIZE*CUBE_ROW_COUNT)
 
#define CUBE_STRING_MAX_LENGTH 32
 
// Color Definitions
#define RED 0x08F,0x000,0x000
#define ORANGE 0x08F,0x020,0x000
#define YELLOW 0x08F,0x08F,0x000
19,6 → 19,7
#define BLUE 0x000,0x000,0x08F
#define PURPLE 0x08F,0x000,0x08F
 
// Control Pin Declarations
#define SFT_D_TRIS TRISBbits.TRISB15
#define SFT_S_TRIS TRISDbits.TRISD5
#define SFT_K_TRIS TRISDbits.TRISD4
35,7 → 36,30
#define GSLAT PORTDbits.RD9
#define XBLNK PORTDbits.RD2
 
// String Overlay Buffer Size
#define CUBE_STRING_MAX_LENGTH 32
 
// Data Streaming In Buffer Size
#define CUBE_FRAME_BUFFER_SIZE 128
#define CUBE_START_CHAR 0x7E
#define CUBE_ESCAPE_CHAR 0x7D
#define CUBE_ESCAPE_XOR 0x20
 
// Data Streaming In Command Set
#define CUBE_COMMAND_SET_PIXEL 0x10 // Layer, Row, Column, R, G, B <-- frame layout
 
 
typedef enum {
IDLE,
READ_LENGTH_MSB,
READ_LENGTH_LSB,
READ_COMMAND,
READ_DATA,
READ_CHECKSUM
} PROCESS_STATE;
 
typedef struct {
// Variables for base cube
unsigned char GCS[CUBE_LAYER_COUNT][GCS_LAYER_SIZE];
unsigned char GCS_OVERLAY[CUBE_LAYER_COUNT][GCS_LAYER_SIZE];
unsigned char GCS_WRITE[CUBE_LAYER_COUNT][GCS_LAYER_SIZE];
42,11 → 66,21
unsigned char current_layer;
unsigned char rotation_counter;
 
// Variables for the scrolling text
unsigned char string[CUBE_STRING_MAX_LENGTH];
unsigned char string_length;
unsigned char string_index;
unsigned char string_line;
int string_R, string_G, string_B;
 
// Variables for input frame data
PROCESS_STATE frame_state;
unsigned char frame_buffer[CUBE_FRAME_BUFFER_SIZE];
int frame_checksum;
int frame_length;
int frame_index;
int frame_command;
int frame_escape;
} CUBE_DATA;
 
void Cube_Init(CUBE_DATA *data, char BC);
67,6 → 101,7
void Cube_Rotate_Shell(char shell, char direction);
void Cube_Rotate(char direction);
 
// Overlay control functions
void Cube_Overlay_Clear(void);
void Cube_Overlay_Set_Pixel(int layer, int row, int column, int R, int G, int B);
void Cube_Overlay_Get_Pixel(int layer, int row, int column, int* R, int* G, int* B);
73,8 → 108,13
void Cube_Overlay_Move_Pixel(int layer1, int row1, int column1, int layer2, int row2, int column2);
void Cube_Overlay_Rotate_Shell(char shell, char direction);
 
// Text control functions
void Cube_Text_Init(char *string, char length, int R, int G, int B);
void Cube_Text_Interrupt(void);
 
// Data stream in control functions
void Cube_Data_In(char c);
void Cube_Data_In_Process_Frame(void);
 
#endif /* CUBE_H */
 
/PIC Stuff/Cerebot_32MX7_LED_Cube/SPI1.c
5,14 → 5,11
 
static SPI1_DATA *spi_data_ptr;
 
void SPI1_Init(SPI1_DATA *data) {
void SPI1_Init(SPI1_DATA *data, void (*rx_callback)(char)) {
spi_data_ptr = data;
spi_data_ptr->outBufferInd = 0;
spi_data_ptr->outBufferLen = 0;
#ifndef SPI1_WRITE_ONLY
spi_data_ptr->inBufferInd = 0;
spi_data_ptr->inBufferLen = 0;
#endif
spi_data_ptr->buffer_out_ind = 0;
spi_data_ptr->buffer_out_len = 0;
spi_data_ptr->rx_callback = rx_callback;
INTDisableInterrupts();
 
38,7 → 35,7
IPC5SET = 0x19000000; // Set IPL=6, Subpriority 1
SPI1BRG = 0x1; // Use FPB/4 clock frequency
SPI1STATCLR = 0x40; // Clear the Overflow
#ifndef SPI1_WRITE_ONLY
#ifndef SPI_WRITE_ONLY
IEC0SET = 0x01800000; // Enable RX and Error interrupts
#endif
// Enhanced buffer, SPI on, 8 bits transfer, SMP=1, Master mode
48,45 → 45,20
INTEnableInterrupts();
}
 
#ifndef SPI1_WRITE_ONLY
int SPI1_Read_Buffer(unsigned char *array, unsigned int count) {
if (count > SPI1_BUFFER_SIZE)
return 0;
if (spi_data_ptr->inBufferLen == 0)
return 0;
int SPI1_Write(unsigned char *array, unsigned int count, void (*tx_callback)(void)) {
spi_data_ptr->tx_callback = tx_callback;
 
// Save previous interrupt state
int prev = IEC0 & 0x03800000;
// Temporarily disable interrupts
IEC0CLR = 0x03800000;
int ret = spi_data_ptr->inBufferLen;
int i;
for (i = 0; i < count; i++) {
array[i] = spi_data_ptr->inBuffer[i];
}
// Reset buffer pointers
spi_data_ptr->inBufferInd = 0;
spi_data_ptr->inBufferLen = 0;
// Restore saved interrupt state
IEC0SET = prev;
// Return the number of valid bytes in the buffer
return ret;
}
#endif
 
int SPI1_Write(unsigned char *array, unsigned int count, void (*callback)(void)) {
spi_data_ptr->callback_function = callback;
 
if (count > SPI1_BUFFER_SIZE)
return 0;
if (spi_data_ptr->outBufferLen != 0)
if (spi_data_ptr->buffer_out_len != 0)
return 0;
 
spi_data_ptr->outBufferLen = count;
spi_data_ptr->outBufferInd = count-1;
// Put the data to send into the outbound buffer
spi_data_ptr->buffer_out_len = count;
spi_data_ptr->buffer_out_ind = count-1;
int i;
for (i = 0; i < count; i++) {
spi_data_ptr->outBuffer[i] = array[i];
spi_data_ptr->buffer_out[i] = array[i];
}
IEC0SET = 0x02000000; // Enable TX interrupt
return 1;
93,7 → 65,7
}
 
void __ISR(_SPI_1_VECTOR, ipl6) __SPI_1_Interrupt_Handler(void) {
#ifndef SPI1_WRITE_ONLY
#ifndef SPI_WRITE_ONLY
// Process SPI1 error flag
if (IFS0bits.SPI1EIF) {
// Clear the receive overflow bit if it is set
108,17 → 80,11
int i;
// Read the data received from the last transfer
int rxBufferCount = SPI1STATbits.RXBUFELM;
if (spi_data_ptr->inBufferLen + rxBufferCount < SPI1_BUFFER_SIZE) {
for (i = 0; i < rxBufferCount; i++) {
spi_data_ptr->inBuffer[spi_data_ptr->inBufferInd] = SPI1BUF;
spi_data_ptr->inBufferInd++;
spi_data_ptr->inBufferLen++;
}
} else {
// If buffer is full, discard data in enhanced buffer
for (i = 0; i < rxBufferCount; i++) {
int tmp = SPI1BUF;
}
for (i = 0; i < rxBufferCount; i++) {
char c = SPI1BUF;
// Call the RX callback function on the received data
if (spi_data_ptr->rx_callback != NULL)
(*spi_data_ptr->rx_callback)(c);
}
IFS0CLR = 0x01000000; // Clear the RX flag
}
128,25 → 94,25
if (IFS0bits.SPI1TXIF) {
int i;
// Disable the transmit interrupt if all data has been sent
if (spi_data_ptr->outBufferLen == 0) {
if (spi_data_ptr->buffer_out_len == 0) {
IEC0CLR=0x02000000;
if (spi_data_ptr->callback_function != NULL)
(*spi_data_ptr->callback_function)();
if (spi_data_ptr->tx_callback != NULL)
(*spi_data_ptr->tx_callback)();
} else {
// Start transmitting the data in the buffer
int txBufferFree = 16 - SPI1STATbits.TXBUFELM;
if (spi_data_ptr->outBufferLen > txBufferFree) {
if (spi_data_ptr->buffer_out_len > txBufferFree) {
for (i = 0; i < txBufferFree; i++) {
SPI1BUF = spi_data_ptr->outBuffer[spi_data_ptr->outBufferInd];
spi_data_ptr->outBufferInd--;
SPI1BUF = spi_data_ptr->buffer_out[spi_data_ptr->buffer_out_ind];
spi_data_ptr->buffer_out_ind--;
}
spi_data_ptr->outBufferLen -= txBufferFree;
spi_data_ptr->buffer_out_len -= txBufferFree;
} else {
for (i = 0; i < spi_data_ptr->outBufferLen; i++) {
SPI1BUF = spi_data_ptr->outBuffer[spi_data_ptr->outBufferInd];
spi_data_ptr->outBufferInd--;
for (i = 0; i < spi_data_ptr->buffer_out_len; i++) {
SPI1BUF = spi_data_ptr->buffer_out[spi_data_ptr->buffer_out_ind];
spi_data_ptr->buffer_out_ind--;
}
spi_data_ptr->outBufferLen = 0;
spi_data_ptr->buffer_out_len = 0;
}
}
IFS0CLR = 0x02000000; // Clear the TX flag
/PIC Stuff/Cerebot_32MX7_LED_Cube/SPI1.h
3,27 → 3,20
 
#define SPI1_BUFFER_SIZE 300
 
// Flag for selecting write-only on SPI1
#define SPI1_WRITE_ONLY
#define SPI_WRITE_ONLY
 
typedef struct {
char outBuffer[SPI1_BUFFER_SIZE];
int outBufferInd;
int outBufferLen;
#ifndef SPI1_WRITE_ONLY
char inBuffer[SPI1_BUFFER_SIZE];
int inBufferInd;
int inBufferLen;
#endif
void (*callback_function)(void);
char buffer_out[SPI1_BUFFER_SIZE];
int buffer_out_ind;
int buffer_out_len;
 
void (*tx_callback)(void);
void (*rx_callback)(char);
} SPI1_DATA;
 
void SPI1_Init(SPI1_DATA *data);
void SPI1_Init(SPI1_DATA *data, void (*rx_callback)(char));
// Note: SPI1_Write() writes MSB -> LSB!
int SPI1_Write(unsigned char *array, unsigned int count, void (*callback)(void));
#ifndef SPI1_WRITE_ONLY
int SPI1_Read_Buffer(unsigned char *array, unsigned int count);
#endif
int SPI1_Write(unsigned char *array, unsigned int count, void (*tx_callback)(void));
 
#endif /* SPI1_H */
 
/PIC Stuff/Cerebot_32MX7_LED_Cube/UART1.c
0,0 → 1,95
#include <xc.h>
#include <plib.h>
#include "defines.h"
#include "UART1.h"
 
static UART1_DATA *uart_data_ptr;
 
void UART1_Init(UART1_DATA *data, void (*rx_callback)(char)) {
uart_data_ptr = data;
uart_data_ptr->rx_callback = rx_callback;
uart_data_ptr->buffer_out_len = 0;
uart_data_ptr->buffer_out_ind = 0;
 
INTDisableInterrupts();
 
IEC0CLR = 0x1C000000; // Disable all UART1 interrupts
IFS0CLR = 0x1C000000; // Clear any existing events
IPC6SET = 0x00000009; // Set Priority = 2, Subpriority = 1
U1MODE = 0x00008000; // UART enabled, BRGH = 0
U1STA = 0x00009400; // TX interrupt on buffer empty, RX interrupt on buffer not empty
U1BRG = 19; // Set baud rate to 256000 @ 80MHz
IEC0SET = 0x0C000000; // Enable the RX and Error interrupts
 
INTEnableInterrupts();
 
TRISDbits.TRISD14 = 0;
PORTDbits.RD14 = 0;
}
 
int UART1_Write(char *string, int length) {
if (length > UART1_BUFFER_SIZE)
return 0;
if (uart_data_ptr->buffer_out_len != 0)
return 0;
 
// Put the data to send into the outbound buffer
uart_data_ptr->buffer_out_len = length;
uart_data_ptr->buffer_out_ind = 0;
int i;
for (i = 0; i < length; i++) {
uart_data_ptr->buffer_out[i] = string[i];
}
IEC0SET = 0x10000000; // Enable TX interrupt
return 1;
}
 
void __ISR(_UART_1_VECTOR, ipl2) __UART_1_Interrupt_Handler(void) {
PORTDbits.RD14 = 1;
// Process UART1 error flag
if (IFS0bits.U1EIF) {
if (U1STAbits.PERR) { // Process parity error
 
}
if (U1STAbits.FERR) { // Process frame error
 
}
if (U1STAbits.OERR) { // Process receive buffer overrun error
U1STAbits.OERR = 0; // Clear the overrun error if set
}
IFS0CLR = 0x04000000; // Clear the error flag
}
 
// Process UART1 recieve flag
if (IFS0bits.U1RXIF) {
// Read the data received from the last transfer
while (U1STAbits.URXDA) {
char c = U1RXREG;
// Call the RX callback function on each received data
if (uart_data_ptr->rx_callback != NULL) {
(*uart_data_ptr->rx_callback)(c);
}
}
IFS0CLR = 0x08000000; // Clear the recieve flag
}
 
// Process UART1 transmit flag
if (IFS0bits.U1TXIF) {
// Disable the transmit interrupt if all data has been sent
if (uart_data_ptr->buffer_out_ind == uart_data_ptr->buffer_out_len) {
IEC0CLR = 0x10000000;
uart_data_ptr->buffer_out_len = 0;
} else {
// Start filling the transmit buffer
while (!U1STAbits.UTXBF) {
U1TXREG = uart_data_ptr->buffer_out[uart_data_ptr->buffer_out_ind];
uart_data_ptr->buffer_out_ind++;
if (uart_data_ptr->buffer_out_ind == uart_data_ptr->buffer_out_len)
break;
}
}
IFS0CLR = 0x10000000; // Clear the transmit flag
}
PORTDbits.RD14 = 0;
}
/PIC Stuff/Cerebot_32MX7_LED_Cube/UART1.h
0,0 → 1,17
#ifndef UART1_H
#define UART1_H
 
#define UART1_BUFFER_SIZE 128
 
typedef struct {
void (*rx_callback)(char c);
 
char buffer_out[UART1_BUFFER_SIZE];
int buffer_out_ind;
int buffer_out_len;
} UART1_DATA;
 
void UART1_Init(UART1_DATA *data, void (*rx_callback)(char));
int UART1_Write(char *string, int length);
 
#endif /* UART1_H */
/PIC Stuff/Cerebot_32MX7_LED_Cube/defines.h
1,5 → 1,9
// PIC32MX795F512L
 
// Uncomment ONE of the following:
//#define CEREBOT_32MX7
#define CEREBOT_MX7CK
 
// Power supply must be 5V for proper operation of the board!
 
#define CPU_CLOCK_HZ 80000000UL
65,7 → 69,7
JE-02 SCL3/SDO3/U1TX/RF8 RF08
JE-03 SDA3/SDI3/U1RX/RF2 RF02
JE-04 AETXD1/SCK3/U4TX/U1RTS/CN21/RD15 RD15
JE-07 TRCLK/RA6 RA06
JE-07 TRCLK/RA6 RA06 on 32MX7 or INT1/RF8 on MX7CK
JE-08 TRD3/RA7 RA07
JE-09 Vref-/CVref-/AERXD2/PMA7/RA9 RA09
JE-10 Vref+/CVref+/AERXD3/PMA6/RA10 RA10
74,7 → 78,7
JF-02 SCL5/SDO4/U2TX/PMA8/CN18/RF5 RF05
JF-03 SDA5/SDI4/U2RX/PMA9/CN17/RF4 RF04
JF-04 AC1TX/SCK4/U5TX/U2RTS/RF13 RF13 shared with CAN1 Transceiver (JP-2)
JF-07 TMS/RA0 RA00
JF-07 TMS/RA0 RA00 on 32MX7 or INT2/RF9 on MX7CK
JF-08 TCK/RA1 RA01
JF-09 TDI/RA4 RA04
JF-10 TDO/RA5 RA05
117,10 → 121,17
 
// <editor-fold defaultstate="collapsed" desc="Connectors">
/*
J7 - I2C port #2 daisy chain connector
* This connector provides access to the I2C signals, power and ground for I2C port #2.
J8 - I2C port #1 daisy chain connector
* This connector provides access to the I2C signals, power and ground for I2C port #1.
J1 - Serial USB Misc Connections (MX7CK only)
* This header contains other FTDI UART function pins (CTS, DSR, DCD, RI)
J2 - Serial USB Connector (MX7CK only)
* This connector is connected to UART1 or PMOD JE
J7 - I2C port daisy chain connector
* On the Cerebot 32MX7, this connector provides access to the I2C signals, power and ground for I2C2.
* On the Cerebot MX7CK, this connector provides access to the I2C signals, power and ground for I2C1 + INT3/4.
J8 - I2C port daisy chain connector
* On the Cerebot 32MX7, this connector provides access to the I2C signals, power and ground for I2C1.
* On the Cerebot MX7CK, this connector provides access to the I2C signals, power and ground for I2C2.
EEPROM is changed to this port on the MX7CK
J9 - CAN #1 Connector
* This connector is used to access the signals for CAN #1.
J10 - CAN #2 Connector
161,10 → 172,6
 
// <editor-fold defaultstate="collapsed" desc="Jumpers">
/*
J20 - USB Host Connector
* This is a standard sized USB type A connector. This connector is used to
connect USB devices to the board when using the PIC32MX795 microcontroller
to implement an embedded USB host.
JP1 & JP2 - CAN or Pmod Select
* These jumpers select microcontroller signals RF12 and RF13 for use with CAN
#1 or Pmod connector JF. Place these jumpers in the CAN position to use CAN
191,11 → 198,14
Insert the shorting block to connect the board 5V0 supply to pins 9 & 10 of
CAN #1 connector. Remove the shorting block to disconnect the 5V0 supply.
JP9 - Do Not Use
JP10 - USB host power select
JP10 - USB Host Power Select
* This jumper is used to select which host connector is powered when host power
is enabled. Place the shorting block in the ?MICRO? position to supply power
to the USB micro-AB OTG Connector, J19. Place the shorting block in the ?A?
position to supply power to the USB type A Host Connector, J20.
JP11 - Programmer Serial Select (MX7CK only)
* Remove the jumper to disconnect the USB serial converter's connection to the
MCLR pin. Disconnecting this when using the built in debugger is recommended.
JP17 - Do Not Use
*/
// </editor-fold>
/PIC Stuff/Cerebot_32MX7_LED_Cube/main.c
39,6 → 39,7
#include <plib.h>
#include <stdlib.h>
#include "defines.h"
#include "UART1.h"
#include "SPI1.h"
#include "TIMER4.h"
#include "TIMER5.h"
86,15 → 87,19
// Set all analog I/O pins to digital
AD1PCFGSET = 0xFFFF;
 
// Initialize peripherals
// Initialize the SPI1 module
SPI1_DATA spi_data;
SPI1_Init(&spi_data);
SPI1_Init(&spi_data, NULL);
 
// Initializs the PWM output to 20MHz
// Initialize the UART1 module
UART1_DATA uart_data;
UART1_Init(&uart_data, &Cube_Data_In);
 
// Initializs the PWM2 output to 20MHz
PWM2_Init();
PWM2_Start();
 
// Initialize the cube
// Initialize the cube variables
CUBE_DATA cube_data;
Cube_Init(&cube_data, 0x40);
 
121,6 → 126,9
// Cube_Set_All(BLUE);
// Delay_MS(6000);
 
char start_text[] = "uC Started";
UART1_Write(start_text, 10);
 
// Set the overlay text
char text_string[] = "Welcome to the CCM Lab ";
Cube_Text_Init(text_string, 26, 0xFF, 0xFF, 0xFF);
/PIC Stuff/Cerebot_32MX7_LED_Cube/nbproject/Makefile-default.mk
45,11 → 45,11
DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE}
 
# Object Files Quoted if spaced
OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/main.o ${OBJECTDIR}/SPI1.o ${OBJECTDIR}/TIMER5.o ${OBJECTDIR}/CUBE.o ${OBJECTDIR}/PWM2.o ${OBJECTDIR}/BTN.o ${OBJECTDIR}/TIMER4.o
POSSIBLE_DEPFILES=${OBJECTDIR}/main.o.d ${OBJECTDIR}/SPI1.o.d ${OBJECTDIR}/TIMER5.o.d ${OBJECTDIR}/CUBE.o.d ${OBJECTDIR}/PWM2.o.d ${OBJECTDIR}/BTN.o.d ${OBJECTDIR}/TIMER4.o.d
OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/main.o ${OBJECTDIR}/SPI1.o ${OBJECTDIR}/TIMER5.o ${OBJECTDIR}/CUBE.o ${OBJECTDIR}/PWM2.o ${OBJECTDIR}/BTN.o ${OBJECTDIR}/TIMER4.o ${OBJECTDIR}/UART1.o
POSSIBLE_DEPFILES=${OBJECTDIR}/main.o.d ${OBJECTDIR}/SPI1.o.d ${OBJECTDIR}/TIMER5.o.d ${OBJECTDIR}/CUBE.o.d ${OBJECTDIR}/PWM2.o.d ${OBJECTDIR}/BTN.o.d ${OBJECTDIR}/TIMER4.o.d ${OBJECTDIR}/UART1.o.d
 
# Object Files
OBJECTFILES=${OBJECTDIR}/main.o ${OBJECTDIR}/SPI1.o ${OBJECTDIR}/TIMER5.o ${OBJECTDIR}/CUBE.o ${OBJECTDIR}/PWM2.o ${OBJECTDIR}/BTN.o ${OBJECTDIR}/TIMER4.o
OBJECTFILES=${OBJECTDIR}/main.o ${OBJECTDIR}/SPI1.o ${OBJECTDIR}/TIMER5.o ${OBJECTDIR}/CUBE.o ${OBJECTDIR}/PWM2.o ${OBJECTDIR}/BTN.o ${OBJECTDIR}/TIMER4.o ${OBJECTDIR}/UART1.o
 
 
CFLAGS=
120,6 → 120,11
@${RM} ${OBJECTDIR}/TIMER4.o.d
@${FIXDEPS} "${OBJECTDIR}/TIMER4.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -O1 -funroll-loops -MMD -MF "${OBJECTDIR}/TIMER4.o.d" -o ${OBJECTDIR}/TIMER4.o TIMER4.c
${OBJECTDIR}/UART1.o: UART1.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} ${OBJECTDIR}
@${RM} ${OBJECTDIR}/UART1.o.d
@${FIXDEPS} "${OBJECTDIR}/UART1.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -D__DEBUG -D__MPLAB_DEBUGGER_PK3=1 -fframe-base-loclist -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -O1 -funroll-loops -MMD -MF "${OBJECTDIR}/UART1.o.d" -o ${OBJECTDIR}/UART1.o UART1.c
else
${OBJECTDIR}/main.o: main.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} ${OBJECTDIR}
156,6 → 161,11
@${RM} ${OBJECTDIR}/TIMER4.o.d
@${FIXDEPS} "${OBJECTDIR}/TIMER4.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -O1 -funroll-loops -MMD -MF "${OBJECTDIR}/TIMER4.o.d" -o ${OBJECTDIR}/TIMER4.o TIMER4.c
${OBJECTDIR}/UART1.o: UART1.c nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} ${OBJECTDIR}
@${RM} ${OBJECTDIR}/UART1.o.d
@${FIXDEPS} "${OBJECTDIR}/UART1.o.d" $(SILENT) -rsi ${MP_CC_DIR}../ -c ${MP_CC} $(MP_EXTRA_CC_PRE) -g -x c -c -mprocessor=$(MP_PROCESSOR_OPTION) -O1 -funroll-loops -MMD -MF "${OBJECTDIR}/UART1.o.d" -o ${OBJECTDIR}/UART1.o UART1.c
endif
 
# ------------------------------------------------------------------------------------
/PIC Stuff/Cerebot_32MX7_LED_Cube/nbproject/Makefile-genesis.properties
1,5 → 1,5
#
#Sun Jul 07 22:44:27 EDT 2013
#Wed Aug 07 15:16:19 EDT 2013
default.com-microchip-mplab-nbide-toolchainXC32-XC32LanguageToolchain.md5=6b4fa04caf3910c7c3a4666b1aea8c5c
default.languagetoolchain.dir=C\:\\Program Files (x86)\\Microchip\\xc32\\v1.20\\bin
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=415494acd195d89b2f6d7a36797a5ab4
/PIC Stuff/Cerebot_32MX7_LED_Cube/nbproject/configurations.xml
12,6 → 12,7
<itemPath>PWM2.h</itemPath>
<itemPath>TIMER4.h</itemPath>
<itemPath>glcdfont.h</itemPath>
<itemPath>UART1.h</itemPath>
</logicalFolder>
<logicalFolder name="LinkerScript"
displayName="Linker Files"
27,6 → 28,7
<itemPath>PWM2.c</itemPath>
<itemPath>BTN.c</itemPath>
<itemPath>TIMER4.c</itemPath>
<itemPath>UART1.c</itemPath>
</logicalFolder>
<logicalFolder name="ExternalFiles"
displayName="Important Files"
/PIC Stuff/Cerebot_32MX7_LED_Cube/nbproject/private/configurations.xml
4,7 → 4,7
<defaultConf>0</defaultConf>
<confs>
<conf name="default" type="2">
<platformToolSN>:=MPLABCommUSB:=04D8:=8108:=0002:=Digilent:=Cerebot 32MX7:=D370400:=x:=en</platformToolSN>
<platformToolSN>:=MPLABCommUSB:=04D8:=8108:=0002:=Digilent:=CerebotMX7CK:=D459520:=x:=en</platformToolSN>
<languageToolchainDir>C:\Program Files (x86)\Microchip\xc32\v1.20\bin</languageToolchainDir>
<mdbdebugger version="1">
<placeholder1>place holder 1</placeholder1>