void temperature_init() { spi_ss_off(); spi_ss_manual(); TEMP_SPI[SPI_CTRL] |= 16; //16 bit transfers TEMP_SPI[SPI_CTRL] |= SPI_CTRL_TXNEG; //Transmit changes on negedge / Latch Pos edge spi_setSpeed( 20 ); spi_ss_on(); spi_ss_auto(); //Calibrate CH1 spr_int_setmask(0x04);//Hackish, clean this up spi_send(ADC_CONFIG | ADC_CAL | ADC_NUL); //Step 1/3 spr_int_clearflags(0x0); while( spr_int_getflags() & 0x4 == 0 ); //for( int volatile i = 0; i < CONVTIME; ++i ); spi_send(ADC_CONFIG | ADC_CAL ); //Step 2/3 spr_int_clearflags(0x0); while( spr_int_getflags() & 0x4 == 0 ); //for( int volatile i = 0; i < CONVTIME*20; ++i ); spi_send(ADC_CONFIG | ADC_NUL); //Step 3/3 spr_int_clearflags(0x0); while( spr_int_getflags() & 0x4 == 0 ); //for( int volatile i = 0; i < CONVTIME; ++i ); spi_send(ADC_CONFIG); //Step 4/3 spr_int_clearflags(0x0); while( spr_int_getflags() & 0x4 == 0 ); //for( int volatile i = 0; i < CONVTIME; ++i ); }
//! Initialise SPI //! //! @param default ctar0 value for SPI.CTAR0 register //! @param default ctar1 value for SPI.CTAR1 register //! //! @note a default frequency is used. //! void spi_init(uint32_t ctar0, uint32_t ctar1) { ctar0Value = ctar0; ctar1Value = ctar1; // Configure SPI (void)spi_setSpeed(0); SPI0->MCR = SPI_MCR_CLR_RXF_MASK|SPI_MCR_ROOE_MASK|SPI_MCR_CLR_TXF_MASK|SPI_MCR_PCSIS((1<<0)|(1<<1))| SPI_MCR_MSTR_MASK|SPI_MCR_FRZ_MASK|SPI_MCR_DCONF(0)|SPI_MCR_SMPL_PT(0); }
//! Initialises the CF BDM interface to default state (including speed) //! void bdmcf_init(void) { DSI_OUT_PER = 1; DSCLK_OUT_PER = 1; #ifdef DSCLK_DRV_PER DSCLK_DRV_PER = 1; // Holds DSCLK driver disabled when unused #endif BKPT_OUT_PER = 1; // Holds BKPT_OUT inactive when unused #ifdef TA_OUT_PER TA_OUT_PER = 1; // Holds TA_OUT inactive when unused #endif RESET_IN_PER = 1; // Needed for input level translation to 5V RESET_OUT_PER = 1; // Holds RESET_OUT inactive when unused #ifdef ALLPST_IN_PER ALLPST_IN_PER = 1; // Needed for input level translation to 5V #endif #ifdef PST_IN_ENABLE PST_IN_ENABLE(); // OSBDM boards #endif // Set up inputs DSO_IN_DDR = 0; RESET_IN_DDR = 0; #ifdef ALLPST_IN_DDR ALLPST_IN_DDR = 0; #endif DSCLK_DRV_ENABLE(); // DSCLK is driven #ifdef SPI2C1 SPI2C1 = SPIxC1_OFF; // SPI2 is unused (Port pin is used for BKPT*) #endif (void)spi_setSpeed(0); SPIxC2 = SPIxC2_16; // Initialise SPI1 but leave disabled bdmcf_interfaceIdle(); #ifdef TCLK_CTL_DISABLE TCLK_CTL_DISABLE(); #endif }
//! Initialise SPI for SWD //! //! @return BDM_RC_OK => success //! uint8_t initDSPI_SWD(void) { spi_configure(SPI_CTAR_LSBFE_MASK|SPI_CTAR_FMSZ(8-1), // 8-bit transfer SPI_CTAR_LSBFE_MASK|SPI_CTAR_FMSZ(16-1)); // 16-bit transfer return spi_setSpeed(0); }
//! Set comm speed to user supplied value //! //! @note //! commandBuffer\n //! - [2..3] => speed in 'ticks'? //! //! @return //! == \ref BDM_RC_OK => success \n //! != \ref BDM_RC_OK => error //! uint8_t f_CMD_SPI_SET_SPEED(void) { uint16_t freq = (commandBuffer[2]<<8)|commandBuffer[3]; // Get the new speed return spi_setSpeed(freq); }