示例#1
0
/**
 * Function to read a word.
 * \param res - pointer in which to store the result
 * \return - 0 the operation is successful
 * \return - 1 the operation is failed. Check internal error for more details
 */
BOOL SPIReadWord(unsigned int * res)
{
	int counter=0;	
	if(SPI2CON1bits.MSTEN==0)
	{
		#ifdef SPI_DBG
		uartwrite(1,"[SPI_DBG] Master op in Slave mode, quitting\n");
		#endif
		_intSPIerr=NotMasterMode;
		return 1;
	}
	if(SPIWriteWord(0x00)==0)
	{
		while((SPI2STATbits.SPIRBF==0) && (counter!=255))
			counter++;
		if(counter<255)
		{
			#ifdef SPI_DBG
			uartwrite(1,"[SPI_DBG] Rx buf ok, reading\n");
			#endif
			if (SPI2CON1bits.MODE16)
			{
				#ifdef SPI_DBG
				uartwrite(1,"[SPI_DBG] Mode16 ok, reading\n");
				#endif
				*res = SPI2BUF;
				_intSPIerr=SPI_NO_ERR;
				return 0;
			}
			else
			{
				#ifdef SPI_DBG
				uartwrite(1,"[SPI_DBG] Mode16 read, no Mode16 set, NOT READING!\n");
				#endif
				_intSPIerr = Mode16ReadNoMode16;
				return 1;
			}
		}		
		#ifdef SPI_DBG
		uartwrite(1,"[SPI_DBG] Rx buf empty, NOT READING!\n");
		#endif
		_intSPIerr = RxBufEmpty;
		return 1;
	}
	
	return 1;
}
示例#2
0
/**
 * Function to perform a contemporary write and read of a word.
 * This is used when the slave device supports full-duplex.
 * In this case while clocking data out, data in is considered valid and saved.
 * \param data - unsigned int data to be sent
 * \param res - pointer to store the received data
 * \return - 0 the operation is successful
 * \return - 1 the operation is failed. Check internal error for more details
 */
BOOL SPIWriteReadWord(unsigned int data, unsigned int * res)
{
	if(SPI2CON1bits.MSTEN==0)
	{
		#ifdef SPI_DBG
		uartwrite(1,"[SPI_DBG] Master op in Slave mode, quitting\n");
		#endif
		_intSPIerr=NotMasterMode;
		return 1;
	}
	//BOOL outcome;
	if(SPIWriteWord(data)==0)
	{
		//outcome = SPIReadWord(res);
		//return outcome;
		*res = SPI2BUF;
		return 0;
	}
	return 1;
}
// transfer line buffer to display using SPI
// input: line	position where line buffer is rendered
void SPIWriteLine(unsigned char line)
{
	P2OUT |= _SCS;										// SCS high, ready talking to display

	SPIWriteByte(MLCD_WR | VCOM);						// send command to write line(s)
	SPIWriteByte(line+1);								// send line address

	UCB0CTL0 |= UCMSB;									// switch SPI to MSB first for proper bitmap orientation

	unsigned char j = 0;
	while(j < (PIXELS_X/8))								// write pixels / 8 bytes
	{
		UCB0TXBUF = LineBuff[j++];						// transfer byte
		while (UCB0STAT & UCBUSY);						// wait for transfer to complete
 	}

	UCB0CTL0 &= ~UCMSB;									// switch SPI back to LSB first for commands

	SPIWriteWord(0);									// send 16 bit to latch buffers and end transfer
	P2OUT &= ~_SCS;										// SCS low, finished talking to display
}
// transfer line buffer to display using SPI
// input: line	position where line buffer is rendered
void SPIWriteLine(unsigned char line)
{
	P1OUT |= _SCS;										// SCS high, ready talking to display

	SPIWriteByte(MLCD_WR | VCOM);						// send command to write line(s)
	SPIWriteByte(line+1);								// send line address

	USICTL0 &= ~USILSB;									// switch SPI to MSB first for proper bitmap orientation

	unsigned char j = 0;
	while(j < (PIXELS_X/8))								// write pixels / 8 bytes
	{
		USISRH = LineBuff[j++];							// store low byte
		USISRL = LineBuff[j++];							// store high byte
		USICNT |= USISCLREL | USI16B | USICNT4;			// release SCLK when done, transfer 16 bits
		while(!(USICTL1 & USIIFG));  					// wait for transfer to complete
	}

	USICTL0 |= USILSB;									// switch SPI back to LSB first for commands

	SPIWriteWord(0);									// send 16 bit to latch buffers and end transfer
	P1OUT &= ~_SCS;										// SCS low, finished talking to display
}
int SPI3W_sendCommand(char cmd){
	int ret=0;

	Transfer f = {
		.data = cmd,
		.type = 0,
	};
	
	void* structure = &f;
	
	//printf("%i\n", sizeof(Transfer));
	ret = SPIWriteWord(structure);
	
	if(ret == -1)
		pabort("Invalid Command");
		
	return ret;
}

int SPI3W_sendData(char datal){
	int ret=0;

	Transfer f = {
		.data = datal,
		.type = 1,
	};

	void* structure = &f;
	
	//printf("%i\n", sizeof(Transfer));
	ret = SPIWriteWord(structure);
	
	if(ret == -1)
		pabort("Invalid Data");
		
	return ret;
}

int init_tft(int deviceNum) {
	int ret=0;
	int SPISpeed = 2000000;
	ret = initResetPin();
	
	if(ret == -1){
		pabort("Unable to initialize reset PIN");
	}
	
	ret = SPIInit(deviceNum, 9, SPISpeed);
	if(ret < 0){
		pabort("Unable to initialize SPI");
	}
		
	//***************************RESET LCD Driver*******************************
	// SET RST Pin high
	resetSet();
	usleep(1000);

	// SET RST Pin low
	resetClear();
	usleep(20000);

	// SET RST Pin high
	resetSet();
	usleep(120000);

	SPI3W_sendCommand(0x11); // Sleep out and Charge Pump on
	usleep(120000);

	SPI3W_sendCommand(0xB1); //SETPWCTR
	SPI3W_sendData(0x02);
	SPI3W_sendData(0x35);
	SPI3W_sendData(0x36);
	
	SPI3W_sendCommand(0xB2); //SETDISPLAY
	SPI3W_sendData(0x02);
	SPI3W_sendData(0x35);
	SPI3W_sendData(0x36);
	
	SPI3W_sendCommand(0xB3); //Doesn't exist
	SPI3W_sendData(0x02);
	SPI3W_sendData(0x35);
	SPI3W_sendData(0x36);
	SPI3W_sendData(0x02);
	SPI3W_sendData(0x35);
	SPI3W_sendData(0x36);

	SPI3W_sendCommand(0xB4); //SETCYC
	SPI3W_sendData(0x07);
	
	SPI3W_sendCommand(0xC0); //SETSTBA
	SPI3W_sendData(0xa2);
	SPI3W_sendData(0x02);
	SPI3W_sendData(0x04);
	
	SPI3W_sendCommand(0xc1); //Doesn't exist
	SPI3W_sendData(0xc5);

	SPI3W_sendCommand(0xc2); //Doesn't exist
	SPI3W_sendData(0x0d);
	SPI3W_sendData(0x00);
	
	SPI3W_sendCommand(0xc3); // SETID
	SPI3W_sendData(0x8d);
	SPI3W_sendData(0x1a);
	
	SPI3W_sendCommand(0xc4); //Doesn't exist
	SPI3W_sendData(0x8d);
	SPI3W_sendData(0xee);
	
	SPI3W_sendCommand(0xc5); //Doesn't exist
	SPI3W_sendData(0x09);
	
	SPI3W_sendCommand(0xE0); //Gamma setting For LGIT Panel
	SPI3W_sendData(0x0a);
	SPI3W_sendData(0x1c);
	SPI3W_sendData(0x0c);
	SPI3W_sendData(0x14);
	SPI3W_sendData(0x33);
	SPI3W_sendData(0x2b);
	SPI3W_sendData(0x24);
	SPI3W_sendData(0x28);
	SPI3W_sendData(0x27);
	SPI3W_sendData(0x25);
	SPI3W_sendData(0x2C);
	SPI3W_sendData(0x39);
	SPI3W_sendData(0x00);
	SPI3W_sendData(0x05);
	SPI3W_sendData(0x03);
	SPI3W_sendData(0x0d);
	
	SPI3W_sendCommand(0xE1); //Doesn't exist
	SPI3W_sendData(0x0a);
	SPI3W_sendData(0x1c);
	SPI3W_sendData(0x0c);
	SPI3W_sendData(0x14);
	SPI3W_sendData(0x33);
	SPI3W_sendData(0x2b);
	SPI3W_sendData(0x24);
	SPI3W_sendData(0x28);
	SPI3W_sendData(0x27);
	SPI3W_sendData(0x25);
	SPI3W_sendData(0x2D);
	SPI3W_sendData(0x3a);
	SPI3W_sendData(0x00);
	SPI3W_sendData(0x05);
	SPI3W_sendData(0x03);
	SPI3W_sendData(0x0d);
	
	SPI3W_sendCommand(0x3A); //Doesn't exist
	SPI3W_sendData(0x06);

	SPI3W_sendCommand(0x29); //Display On
	usleep(150);
}