void Chip_ADS1248_SelfOffsetCal(uint8_t chip) { Chip_SSP_DATA_SETUP_T xf_setup; xf_setup.length = BUFFER_SIZE; xf_setup.rx_cnt = 0; xf_setup.tx_cnt = 0; xf_setup.rx_data = rx_buf; xf_setup.tx_data = tx_buf; Chip_ADS1248_BufferInit(); tx_buf[0] = SELFOCAL; if(chip == CHIP_U1) { Chip_GPIO_SetPinOutLow(LPC_GPIO, ADS_nSSEL0); //Chip select Low(0) Chip_SSP_RWFrames_Blocking(ADS_SSP, &xf_setup); Chip_GPIO_SetPinOutHigh(LPC_GPIO, ADS_nSSEL0); //Chip select High(1) } else { Chip_GPIO_SetPinOutLow(LPC_GPIO, ADS_nSSEL1); //Chip select Low(0) Chip_SSP_RWFrames_Blocking(ADS_SSP, &xf_setup); Chip_GPIO_SetPinOutHigh(LPC_GPIO, ADS_nSSEL1); //Chip select High(1) } return; }
void Chip_ADS1248_WriteRegister(uint8_t chip, uint8_t address, uint8_t value) { Chip_SSP_DATA_SETUP_T xf_setup; xf_setup.length = BUFFER_SIZE; xf_setup.rx_cnt = 0; xf_setup.tx_cnt = 0; xf_setup.rx_data = rx_buf; xf_setup.tx_data = tx_buf; Chip_ADS1248_BufferInit(); tx_buf[0] = (WREG | address); //Register address 0010 rrrr, 'r' being register address tx_buf[1] = 0; //Num_of_bytes - 1 tx_buf[2] = value; //Register value if(chip == CHIP_U1) { Chip_GPIO_SetPinOutLow(LPC_GPIO, ADS_nSSEL0); //Chip select Low(0) Chip_SSP_RWFrames_Blocking(ADS_SSP, &xf_setup); Chip_GPIO_SetPinOutHigh(LPC_GPIO, ADS_nSSEL0); //Chip select High(1) } else { Chip_GPIO_SetPinOutLow(LPC_GPIO, ADS_nSSEL1); //Chip select Low(0) Chip_SSP_RWFrames_Blocking(ADS_SSP, &xf_setup); Chip_GPIO_SetPinOutHigh(LPC_GPIO, ADS_nSSEL1); //Chip select High(1) } return; }
uint8_t Chip_ADS1248_ReadRegister(uint8_t chip, uint8_t address) { Chip_SSP_DATA_SETUP_T xf_setup; xf_setup.length = BUFFER_SIZE; xf_setup.rx_cnt = 0; xf_setup.tx_cnt = 0; xf_setup.rx_data = rx_buf; xf_setup.tx_data = tx_buf; Chip_ADS1248_BufferInit(); tx_buf[0] = (RREG | address); //Register address 0010 rrrr, 'r' being register address tx_buf[1] = 0; //Num_of_bytes - 1 if(chip == CHIP_U1) { Chip_GPIO_SetPinOutLow(LPC_GPIO, ADS_nSSEL0); //Chip select Low(0) Chip_SSP_RWFrames_Blocking(ADS_SSP, &xf_setup); Chip_GPIO_SetPinOutHigh(LPC_GPIO, ADS_nSSEL0); //Chip select High(1) } else { Chip_GPIO_SetPinOutLow(LPC_GPIO, ADS_nSSEL1); //Chip select Low(0) Chip_SSP_RWFrames_Blocking(ADS_SSP, &xf_setup); Chip_GPIO_SetPinOutHigh(LPC_GPIO, ADS_nSSEL1); //Chip select High(1) } return rx_buf[2]; //during transmission 2 rcv. bytes are junk, third is the reg. value }
void spi_transceive(uint8_t tx_len, uint8_t rx_len) { // Setup params for sending xf_setup.rx_cnt = 0; xf_setup.tx_cnt = 0; xf_setup.length = tx_len + rx_len; // Send Chip_SSP_RWFrames_Blocking(spi_id, &xf_setup); }
void writeToSPI(int length) { spi.length = length; spi.rx_cnt = 0; spi.tx_cnt = 0; Chip_GPIO_SetPinOutLow(LPC_GPIO, CSN_PORT, CSN_PIN); Chip_SSP_RWFrames_Blocking(LPC_SSP1, &spi); Chip_GPIO_SetPinOutHigh(LPC_GPIO, CSN_PORT, CSN_PIN); }
uint32_t Board_SSP_transfer(uint8_t *bufferTx, uint8_t *bufferRx, uint32_t bufferLen) { Chip_SSP_DATA_SETUP_T spiSetup; spiSetup.tx_data = bufferTx; spiSetup.rx_data = bufferRx; spiSetup.tx_cnt=0; spiSetup.rx_cnt=0; spiSetup.length=bufferLen; return Chip_SSP_RWFrames_Blocking(LPC_SSP1, &spiSetup); }
void wr_com16(uint8_t hexa1,uint8_t hexa2) { port_pin(4,9, disable, low);//cs=0 port_pin(4,10, disable, high);//dc=1 xf_setup.length = sizeof(hexa1); xf_setup.rx_data = Rx_Buf; xf_setup.rx_cnt = xf_setup.tx_cnt = 0; xf_setup.tx_data = hexa1; Chip_SSP_RWFrames_Blocking(LPC_SSP, &xf_setup); port_pin(4,9, disable, high);//cs=0 port_pin(4,9, disable, low);//cs=1 port_pin(4,10, disable, high);//dc=1 xf_setup.length = sizeof(hexa2); xf_setup.rx_data = Rx_Buf; xf_setup.rx_cnt = xf_setup.tx_cnt = 0; xf_setup.tx_data= hexa2; Chip_SSP_RWFrames_Blocking(LPC_SSP, &xf_setup); port_pin(4,9, disable, high);//cs=1 }
void write_command(uint8_t hexa) { port_pin(4,9, disable, low);//cs=0 port_pin(4,10, disable, low);//dc=0 xf_setup.length = sizeof(hexa); xf_setup.rx_data = Rx_Buf; xf_setup.rx_cnt = xf_setup.tx_cnt = 0; xf_setup.tx_data= hexa; Chip_SSP_Enable(LPC_SSP); Chip_SSP_RWFrames_Blocking(LPC_SSP, &xf_setup); port_pin(4,9, disable, high);//cs=1 }
uint8_t SPI_ReadWrite( uint8_t p) { uint8_t rxBuf; Chip_SSP_DATA_SETUP_T data; Chip_GPIO_SetPinOutLow(LPC_GPIO, TOUCH_E); data.rx_data=&rxBuf; data.tx_data=&p; data.length=1; data.rx_cnt = 0; data.tx_cnt = 0; Chip_SSP_RWFrames_Blocking(LPC_SSP0,&data); //Chip_GPIO_SetPinOutHigh(LPC_GPIO,TOUCH_E); return rxBuf; }
void ssp_write_read( uint8_t id, uint8_t *tx_buf, uint32_t tx_len, uint8_t *rx_buf, uint32_t rx_len, uint32_t timeout ) { Chip_SSP_DATA_SETUP_T * data_st = &ssp_cfg[id].xf_setup; tx_ssp = pvPortMalloc(tx_len); rx_ssp = pvPortMalloc(rx_len+tx_len); memcpy(tx_ssp, tx_buf, tx_len); ssp_cfg[id].caller_task = xTaskGetCurrentTaskHandle(); data_st->tx_cnt = 0; data_st->rx_cnt = 0; data_st->tx_data = tx_ssp; data_st->rx_data = rx_ssp; data_st->length = rx_len+tx_len; /* Assert Slave Select pin to enable the transfer */ ssp_ssel_control(id, ASSERT); if (ssp_cfg[id].polling) { Chip_SSP_RWFrames_Blocking(ssp_cfg[id].lpc_id, data_st); ssp_ssel_control(id, DEASSERT); } else { Chip_SSP_Int_FlushData(ssp_cfg[id].lpc_id); /* Enable interrupt-based data transmission */ Chip_SSP_Int_Enable( ssp_cfg[id].lpc_id ); /* User defined timeout ? */ /* Wait until the transfer is finished */ ulTaskNotifyTake(pdTRUE, timeout); } if (rx_buf && rx_len > 0) { memcpy(rx_buf, rx_ssp, rx_len+tx_len); } vPortFree(rx_ssp); vPortFree(tx_ssp); }
/* Select the Transfer mode : Polling, Interrupt or DMA */ static void appSSPTest(void) { int key; DEBUGOUT(sspTransferModeSel); dmaChSSPTx = Chip_GPDMA_GetFreeChannel(LPC_GPDMA, LPC_GPDMA_SSP_TX); dmaChSSPRx = Chip_GPDMA_GetFreeChannel(LPC_GPDMA, LPC_GPDMA_SSP_RX); xf_setup.length = BUFFER_SIZE; xf_setup.tx_data = Tx_Buf; xf_setup.rx_data = Rx_Buf; while (1) { key = 0xFF; do { key = DEBUGIN(); } while ((key & 0xFF) == 0xFF); Buffer_Init(); switch (key) { case SSP_POLLING_SEL: /* SSP Polling Read Write Mode */ DEBUGOUT(sspWaitingMenu); xf_setup.rx_cnt = xf_setup.tx_cnt = 0; Chip_SSP_RWFrames_Blocking(LPC_SSP, &xf_setup); if (Buffer_Verify() == 0) { DEBUGOUT(sspPassedMenu); } else { DEBUGOUT(sspFailedMenu); } break; case SSP_INTERRUPT_SEL: DEBUGOUT(sspIntWaitingMenu); isXferCompleted = 0; xf_setup.rx_cnt = xf_setup.tx_cnt = 0; Chip_SSP_Int_FlushData(LPC_SSP);/* flush dummy data from SSP FiFO */ if (SSP_DATA_BYTES(ssp_format.bits) == 1) { Chip_SSP_Int_RWFrames8Bits(LPC_SSP, &xf_setup); } else { Chip_SSP_Int_RWFrames16Bits(LPC_SSP, &xf_setup); } Chip_SSP_Int_Enable(LPC_SSP); /* enable interrupt */ while (!isXferCompleted) {} if (Buffer_Verify() == 0) { DEBUGOUT(sspPassedMenu); } else { DEBUGOUT(sspFailedMenu); } break; case SSP_DMA_SEL: /* SSP DMA Read and Write: fixed on 8bits */ DEBUGOUT(sspDMAWaitingMenu); isDmaTxfCompleted = isDmaRxfCompleted = 0; Chip_SSP_DMA_Enable(LPC_SSP); /* data Tx_Buf --> SSP */ Chip_GPDMA_Transfer(LPC_GPDMA, dmaChSSPTx, (uint32_t) &Tx_Buf[0], LPC_GPDMA_SSP_TX, GPDMA_TRANSFERTYPE_M2P_CONTROLLER_DMA, BUFFER_SIZE); /* data SSP --> Rx_Buf */ Chip_GPDMA_Transfer(LPC_GPDMA, dmaChSSPRx, LPC_GPDMA_SSP_RX, (uint32_t) &Rx_Buf[0], GPDMA_TRANSFERTYPE_P2M_CONTROLLER_DMA, BUFFER_SIZE); while (!isDmaTxfCompleted || !isDmaRxfCompleted) {} if (Buffer_Verify() == 0) { DEBUGOUT(sspPassedMenu); } else { DEBUGOUT(sspFailedMenu); } Chip_SSP_DMA_Disable(LPC_SSP); break; case 'q': case 'Q': Chip_GPDMA_Stop(LPC_GPDMA, dmaChSSPTx); Chip_GPDMA_Stop(LPC_GPDMA, dmaChSSPRx); return; default: break; } DEBUGOUT(sspTransferModeSel); } }
int32_t Chip_ADS1248_GetTemperature(uint8_t chip, uint8_t rtd) { uint32_t temperatura_raw = 0; int32_t temperatura = 0; Chip_SSP_DATA_SETUP_T xf_setup; if(chip == CHIP_U1) { Chip_GPIO_SetPinOutHigh(LPC_GPIO, ADS_START0); temperatura_raw = Chip_ADS1248_ReadRegister(CHIP_U1, MUX0); if(rtd == RTD_1) { Chip_ADS1248_WriteRegister(chip, MUX0, 0x01); Chip_ADS1248_WriteRegister(chip, IDAC1, 0x8F); } else { Chip_ADS1248_WriteRegister(chip, MUX0, 0x13); Chip_ADS1248_WriteRegister(chip, IDAC1, 0x9F); } temperatura_raw = Chip_ADS1248_ReadRegister(CHIP_U1, MUX0); temperatura_raw = Chip_ADS1248_ReadRegister(CHIP_U1, IDAC1); Chip_ADS1248_BufferInit(); xf_setup.length = BUFFER_SIZE; xf_setup.rx_cnt = 0; xf_setup.tx_cnt = 0; xf_setup.rx_data = rx_buf; xf_setup.tx_data = tx_buf; tx_buf[0] = RDATA; Chip_GPIO_SetPinOutLow(LPC_GPIO, ADS_START0); NVIC_EnableIRQ(PIN_INT0_IRQn); osSignalWait(0x0004, osWaitForever); NVIC_DisableIRQ(PIN_INT0_IRQn); Chip_GPIO_SetPinOutLow(LPC_GPIO, ADS_nSSEL0); //Chip select Low(0) Chip_SSP_RWFrames_Blocking(ADS_SSP, &xf_setup); Chip_GPIO_SetPinOutHigh(LPC_GPIO, ADS_nSSEL0); //Chip select High(1) } else { Chip_GPIO_SetPinOutHigh(LPC_GPIO, ADS_START1); if(rtd == RTD_3) { Chip_ADS1248_WriteRegister(chip, MUX0, 0x01); Chip_ADS1248_WriteRegister(chip, IDAC1, 0x8F); } else { Chip_ADS1248_WriteRegister(chip, MUX0, 0x13); Chip_ADS1248_WriteRegister(chip, IDAC1, 0x9F); } Chip_ADS1248_BufferInit(); xf_setup.length = BUFFER_SIZE; xf_setup.rx_cnt = 0; xf_setup.tx_cnt = 0; xf_setup.rx_data = rx_buf; xf_setup.tx_data = tx_buf; tx_buf[0] = RDATA; Chip_GPIO_SetPinOutLow(LPC_GPIO, ADS_START1); NVIC_EnableIRQ(PIN_INT1_IRQn); osSignalWait(0x0005, osWaitForever); NVIC_DisableIRQ(PIN_INT1_IRQn); Chip_GPIO_SetPinOutLow(LPC_GPIO, ADS_nSSEL1); //Chip select Low(0) Chip_SSP_RWFrames_Blocking(ADS_SSP, &xf_setup); Chip_GPIO_SetPinOutHigh(LPC_GPIO, ADS_nSSEL1); } temperatura_raw = ((rx_buf[1] << 16) & 0x00ff0000) | ((rx_buf[2] << 8) & 0x0000ff00) | (rx_buf[3] & 0xff); temperatura = GetTemperature(temperatura_raw); return temperatura; }