Exemple #1
0
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 );
}
Exemple #2
0
//! 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);
}
Exemple #5
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);
}