// ************************************************************************************************* // // Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ // // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // // Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the // distribution. // // Neither the name of Texas Instruments Incorporated nor the names of // its contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // ************************************************************************************************* // Temperature measurement functions. // ************************************************************************************************* // ************************************************************************************************* // Include section // system #include "project.h" // driver #include "display.h" #include "vti_as.h" // logic #include "acceleration.h" #include "simpliciti.h" #include "user.h" // ************************************************************************************************* // Global Variable section struct accel sAccel; // Conversion values from data to mgrav taken from CMA3000-D0x datasheet (rev 0.4, table 4) const u16 mgrav_per_bit[7] = { 18, 36, 71, 143, 286, 571, 1142 }; // ************************************************************************************************* // Extern section // Global flag for proper acceleration sensor operation extern u8 as_ok; // ************************************************************************************************* // @fn reset_acceleration // @brief Reset acceleration variables. // @param none // @return none // ************************************************************************************************* void reset_acceleration(void) { // Start with Y-axis display sAccel.view_style = DISPLAY_ACCEL_Y; // Clear timeout counter sAccel.timeout = 0; // Default mode is off sAccel.mode = ACCEL_MODE_OFF; } // ************************************************************************************************* // @fn sx_acceleration // @brief Acceleration direct function. Button UP switches between X/Y/Z values. // @param u8 line LINE2 // @return none // ************************************************************************************************* void sx_acceleration(u8 line) { if (++sAccel.view_style > 2) sAccel.view_style = 0; // Reset current acceleration value sAccel.data = 0; // Get data from sensor as_get_data(sAccel.xyz); } // ************************************************************************************************* // @fn acceleration_value_is_positive // @brief Returns 1 if 2's complement number is positive // @param u8 value 2's complement number // @return u8 1 = number is positive, 0 = number is negavtive // ************************************************************************************************* u8 acceleration_value_is_positive(u8 value) { return ((value & BIT7) == 0); } // ************************************************************************************************* // @fn convert_acceleration_value_to_mgrav // @brief Converts measured value to mgrav units // @param u8 value g data from sensor // @return u16 Acceleration (mgrav) // ************************************************************************************************* u16 convert_acceleration_value_to_mgrav(u8 value) { u16 result; u8 i; if (!acceleration_value_is_positive(value)) { // Convert 2's complement negative number to positive number value = ~value; value += 1; } result = 0; for (i=0; i<7; i++) { result += ((value & (BIT(i)))>>i) * mgrav_per_bit[i]; } return (result); } // ************************************************************************************************* // @fn is_acceleration_measurement // @brief Returns 1 if acceleration is currently measured. // @param none // @return u8 1 = acceleration measurement ongoing // ************************************************************************************************* u8 is_acceleration_measurement(void) { return ((sAccel.mode == ACCEL_MODE_ON) && (sAccel.timeout > 0)); } // ************************************************************************************************* // @fn do_acceleration_measurement // @brief Get sensor data and store in sAccel struct // @param none // @return none // ************************************************************************************************* void do_acceleration_measurement(void) { // Get data from sensor as_get_data(sAccel.xyz); // Set display update flag display.flag.update_acceleration = 1; } // ************************************************************************************************* // @fn display_acceleration // @brief Display routine. // @param u8 line LINE1 // u8 update DISPLAY_LINE_UPDATE_FULL, DISPLAY_LINE_CLEAR // @return none // ************************************************************************************************* void display_acceleration(u8 line, u8 update) { u8 * str; u8 raw_data; u16 accel_data; // Show warning if acceleration sensor was not initialised properly if (!as_ok) { display_chars(LCD_SEG_L1_2_0, (u8*)"ERR", SEG_ON); } else { // Redraw whole screen if (update == DISPLAY_LINE_UPDATE_FULL) { { // Start acceleration sensor if (!is_acceleration_measurement()) { // Clear previous acceleration value sAccel.data = 0; // Start sensor as_start(); // Set timeout counter sAccel.timeout = ACCEL_MEASUREMENT_TIMEOUT; // Set mode sAccel.mode = ACCEL_MODE_ON; // Start with Y-axis values sAccel.view_style = DISPLAY_ACCEL_Y; } // Display decimal point display_symbol(LCD_SEG_L1_DP1, SEG_ON); } } else if (update == DISPLAY_LINE_UPDATE_PARTIAL) { // Convert X/Y/Z values to mg switch (sAccel.view_style) { case DISPLAY_ACCEL_X: raw_data = sAccel.xyz[0]; display_char(LCD_SEG_L1_3, 'X', SEG_ON); break; case DISPLAY_ACCEL_Y: raw_data = sAccel.xyz[1]; display_char(LCD_SEG_L1_3, 'Y', SEG_ON); break; default: raw_data = sAccel.xyz[2]; display_char(LCD_SEG_L1_3, 'Z', SEG_ON); break; } accel_data = convert_acceleration_value_to_mgrav(raw_data) / 10; // Filter acceleration accel_data = (u16)((accel_data * 0.2) + (sAccel.data * 0.8)); // Store average acceleration sAccel.data = accel_data; // Display acceleration in x.xx format str = itoa(accel_data, 3, 0); display_chars(LCD_SEG_L1_2_0, str, SEG_ON); // Display sign if (acceleration_value_is_positive(raw_data)) { display_symbol(LCD_SYMB_ARROW_UP, SEG_ON); display_symbol(LCD_SYMB_ARROW_DOWN, SEG_OFF); } else { display_symbol(LCD_SYMB_ARROW_UP, SEG_OFF); display_symbol(LCD_SYMB_ARROW_DOWN, SEG_ON); } } else if (update == DISPLAY_LINE_CLEAR) { // Stop acceleration sensor as_stop(); // Clear mode sAccel.mode = ACCEL_MODE_OFF; // Clean up display display_symbol(LCD_SEG_L1_DP1, SEG_OFF); display_symbol(LCD_SYMB_ARROW_UP, SEG_OFF); display_symbol(LCD_SYMB_ARROW_DOWN, SEG_OFF); } } }
acceleration.h
// ************************************************************************************************* // // Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ // // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // // Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the // distribution. // // Neither the name of Texas Instruments Incorporated nor the names of // its contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // ************************************************************************************************* #ifndef ACCELERATION_H_ #define ACCELERATION_H_ // ************************************************************************************************* // Include section // ************************************************************************************************* // Prototypes section // ************************************************************************************************* // Defines section #define DISPLAY_ACCEL_X (0u) #define DISPLAY_ACCEL_Y (1u) #define DISPLAY_ACCEL_Z (2u) #define ACCEL_MODE_OFF (0u) #define ACCEL_MODE_ON (1u) // Stop acceleration measurement after 60 minutes to save battery #define ACCEL_MEASUREMENT_TIMEOUT (60*60u) // ************************************************************************************************* // Global Variable section struct accel { // ACC_MODE_OFF, ACC_MODE_ON u8 mode; // Sensor raw data u8 xyz[3]; // Acceleration data in 10 * mgrav u16 data; // Display X/Y/Z values u8 view_style; // Timeout u16 timeout; }; extern struct accel sAccel; // ************************************************************************************************* // Extern section extern void reset_acceleration(void); extern void sx_acceleration(u8 line); extern void display_acceleration(u8 line, u8 update); extern u8 is_acceleration_measurement(void); extern void do_acceleration_measurement(void); #endif /*ACCELERATION_H_*/
vti_as.c
// ************************************************************************************************* // // Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ // // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // // Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the // distribution. // // Neither the name of Texas Instruments Incorporated nor the names of // its contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // ************************************************************************************************* // VTI CMA3000-D0x acceleration sensor driver functions // ************************************************************************************************* // ************************************************************************************************* // Include section // system #include "project.h" // logic #include "simpliciti.h" // driver #include "vti_as.h" #include "timer.h" #include "display.h" // ************************************************************************************************* // Prototypes section void as_start(void); void as_stop(void); u8 as_read_register(u8 bAddress); u8 as_write_register(u8 bAddress, u8 bData); // ************************************************************************************************* // Defines section // ================================================================================================= // CMA3000-D0x acceleration sensor configuration // ================================================================================================= // DCO frequency division factor determining speed of the acceleration sensor SPI interface // Speed in Hz = 12MHz / AS_BR_DIVIDER (max. 500kHz) #define AS_BR_DIVIDER (30u) // Acceleration measurement range in g // Valid ranges are: 2 and 8 #define AS_RANGE (2u) // Sample rate for acceleration values in Hz // Valid sample rates for 2g range are: 100, 400 // Valid sample rates for 8g range are: 40, 100, 400 #define AS_SAMPLE_RATE (100u) // ************************************************************************************************* // Global Variable section // Global flag for proper acceleration sensor operation u8 as_ok; // ************************************************************************************************* // Extern section // ************************************************************************************************* // @fn as_init // @brief Setup acceleration sensor connection, do not power up yet // @param none // @return none // ************************************************************************************************* void as_init(void) { #ifdef AS_DISCONNECT // Deactivate connection to acceleration sensor AS_PWR_OUT &= ~AS_PWR_PIN; // Power off AS_INT_OUT &= ~AS_INT_PIN; // Pin to low to avoid floating pins AS_SPI_OUT &= ~(AS_SDO_PIN + AS_SDI_PIN + AS_SCK_PIN); // Pin to low to avoid floating pins AS_CSN_OUT &= ~AS_CSN_PIN; // Pin to low to avoid floating pins AS_INT_DIR |= AS_INT_PIN; // Pin to output to avoid floating pins AS_SPI_DIR |= AS_SDO_PIN + AS_SDI_PIN + AS_SCK_PIN; // Pin to output to avoid floating pins AS_CSN_DIR |= AS_CSN_PIN; // Pin to output to avoid floating pins AS_PWR_DIR |= AS_PWR_PIN; // Power pin to output direction #else AS_INT_DIR &= ~AS_INT_PIN; // Input AS_SPI_DIR &= ~AS_SDI_PIN; // Input AS_SPI_DIR |= AS_SDO_PIN + AS_SCK_PIN; // Output AS_SPI_SEL |= AS_SDO_PIN + AS_SDI_PIN + AS_SCK_PIN; // Port pins to SDO, SDI and SCK function AS_CSN_OUT |= AS_CSN_PIN; // CSN=1 AS_CSN_DIR |= AS_CSN_PIN; // AS_PWR_OUT |= AS_PWR_PIN; // VDD=1 AS_PWR_DIR |= AS_PWR_PIN; // #endif // Reset global sensor flag as_ok = 1; } // ************************************************************************************************* // @fn as_start // @brief Power-up and initialize acceleration sensor // @param none // @return none // ************************************************************************************************* void as_start(void) { volatile u16 Counter_u16; u8 bConfig;//, bStatus; // Initialize SPI interface to acceleration sensor AS_SPI_CTL0 |= UCSYNC | UCMST | UCMSB // SPI master, 8 data bits, MSB first, | UCCKPH; // clock idle low, data output on falling edge AS_SPI_CTL1 |= UCSSEL1; // SMCLK as clock source AS_SPI_BR0 = AS_BR_DIVIDER; // Low byte of division factor for baud rate AS_SPI_BR1 = 0x00; // High byte of division factor for baud rate AS_SPI_CTL1 &= ~UCSWRST; // Start SPI hardware // Initialize interrupt pin for data read out from acceleration sensor AS_INT_IES &= ~AS_INT_PIN; // Interrupt on rising edge #ifdef AS_DISCONNECT // Enable interrupt AS_INT_DIR &= ~AS_INT_PIN; // Switch INT pin to input AS_SPI_DIR &= ~AS_SDI_PIN; // Switch SDI pin to input AS_SPI_REN |= AS_SDI_PIN; // Pulldown on SDI pin AS_SPI_SEL |= AS_SDO_PIN + AS_SDI_PIN + AS_SCK_PIN; // Port pins to SDO, SDI and SCK function AS_CSN_OUT |= AS_CSN_PIN; // Deselect acceleration sensor AS_PWR_OUT |= AS_PWR_PIN; // Power on active high #endif // Delay of >5ms required between switching on power and configuring sensor Timer0_A4_Delay(CONV_MS_TO_TICKS(10)); // Initialize interrupt pin for data read out from acceleration sensor AS_INT_IFG &= ~AS_INT_PIN; // Reset flag AS_INT_IE |= AS_INT_PIN; // Enable interrupt // Configure sensor and start to sample data #if (AS_RANGE == 2) bConfig = 0x80; #if (AS_SAMPLE_RATE == 100) bConfig |= 0x02; #elif (AS_SAMPLE_RATE == 400) bConfig |= 0x04; #else #error "Sample rate not supported" #endif #elif (AS_RANGE == 8) bConfig = 0x00; #if (AS_SAMPLE_RATE == 40) bConfig |= 0x06; #elif (AS_SAMPLE_RATE == 100) bConfig |= 0x02; #elif (AS_SAMPLE_RATE == 400) bConfig |= 0x04; #else #error "Sample rate not supported" #endif #else #error "Measurement range not supported" #endif // Reset sensor as_write_register(0x04, 0x02); as_write_register(0x04, 0x0A); as_write_register(0x04, 0x04); // Wait 5 ms before starting sensor output Timer0_A4_Delay(CONV_MS_TO_TICKS(5)); // Set 2g measurement range, start to output data with 100Hz rate as_write_register(0x02, bConfig); } // ************************************************************************************************* // @fn as_stop // @brief Power down acceleration sensor // @param none // @return none // ************************************************************************************************* void as_stop(void) { // Disable interrupt AS_INT_IE &= ~AS_INT_PIN; // Disable interrupt #ifdef AS_DISCONNECT // Power-down sensor AS_PWR_OUT &= ~AS_PWR_PIN; // Power off AS_INT_OUT &= ~AS_INT_PIN; // Pin to low to avoid floating pins AS_SPI_OUT &= ~(AS_SDO_PIN + AS_SDI_PIN + AS_SCK_PIN); // Pins to low to avoid floating pins AS_SPI_SEL &= ~(AS_SDO_PIN + AS_SDI_PIN + AS_SCK_PIN); // Port pins to I/O function AS_CSN_OUT &= ~AS_CSN_PIN; // Pin to low to avoid floating pins AS_INT_DIR |= AS_INT_PIN; // Pin to output to avoid floating pins AS_SPI_DIR |= AS_SDO_PIN + AS_SDI_PIN + AS_SCK_PIN; // Pins to output to avoid floating pins AS_CSN_DIR |= AS_CSN_PIN; // Pin to output to avoid floating pins #else // Reset sensor -> sensor to powerdown as_write_register(0x04, 0x02); as_write_register(0x04, 0x0A); as_write_register(0x04, 0x04); #endif } // ************************************************************************************************* // @fn as_read_register // @brief Read a byte from the acceleration sensor // @param u8 bAddress Register address // @return u8 Register content // ************************************************************************************************* u8 as_read_register(u8 bAddress) { u8 bResult; u16 timeout; // Exit function if an error was detected previously if (!as_ok) return (0); bAddress <<= 2; // Address to be shifted left by 2 and RW bit to be reset AS_SPI_REN &= ~AS_SDI_PIN; // Pulldown on SDI pin not required AS_CSN_OUT &= ~AS_CSN_PIN; // Select acceleration sensor bResult = AS_RX_BUFFER; // Read RX buffer just to clear interrupt flag AS_TX_BUFFER = bAddress; // Write address to TX buffer timeout = SPI_TIMEOUT; while (!(AS_IRQ_REG & AS_RX_IFG) && (--timeout>0)); // Wait until new data was written into RX buffer if (timeout == 0) { as_ok = 0; return (0); } bResult = AS_RX_BUFFER; // Read RX buffer just to clear interrupt flag AS_TX_BUFFER = 0; // Write dummy data to TX buffer timeout = SPI_TIMEOUT; while (!(AS_IRQ_REG & AS_RX_IFG) && (--timeout>0)); // Wait until new data was written into RX buffer if (timeout == 0) { as_ok = 0; return (0); } bResult = AS_RX_BUFFER; // Read RX buffer AS_CSN_OUT |= AS_CSN_PIN; // Deselect acceleration sensor AS_SPI_REN |= AS_SDI_PIN; // Pulldown on SDI pin required again // Return new data from RX buffer return bResult; } // ************************************************************************************************* // @fn as_write_register // @brief Write a byte to the acceleration sensor // @param u8 bAddress Register address // u8 bData Data to write // @return u8 // ************************************************************************************************* u8 as_write_register(u8 bAddress, u8 bData) { u8 bResult; u16 timeout; // Exit function if an error was detected previously if (!as_ok) return (0); bAddress <<= 2; // Address to be shifted left by 1 bAddress |= BIT1; // RW bit to be set AS_SPI_REN &= ~AS_SDI_PIN; // Pulldown on SDI pin not required AS_CSN_OUT &= ~AS_CSN_PIN; // Select acceleration sensor bResult = AS_RX_BUFFER; // Read RX buffer just to clear interrupt flag AS_TX_BUFFER = bAddress; // Write address to TX buffer timeout = SPI_TIMEOUT; while (!(AS_IRQ_REG & AS_RX_IFG) && (--timeout>0)); // Wait until new data was written into RX buffer if (timeout == 0) { as_ok = 0; return (0); } bResult = AS_RX_BUFFER; // Read RX buffer just to clear interrupt flag AS_TX_BUFFER = bData; // Write data to TX buffer timeout = SPI_TIMEOUT; while (!(AS_IRQ_REG & AS_RX_IFG) && (--timeout>0)); // Wait until new data was written into RX buffer if (timeout == 0) { as_ok = 0; return (0); } bResult = AS_RX_BUFFER; // Read RX buffer AS_CSN_OUT |= AS_CSN_PIN; // Deselect acceleration sensor AS_SPI_REN |= AS_SDI_PIN; // Pulldown on SDI pin required again return bResult; } // ************************************************************************************************* // @fn as_get_data // @brief Service routine to read acceleration values. // @param none // @return none // ************************************************************************************************* void as_get_data(u8 * data) { // Exit if sensor is not powered up if ((AS_PWR_OUT & AS_PWR_PIN) != AS_PWR_PIN) return; // Store X/Y/Z acceleration data in buffer *(data+0) = as_read_register(0x06); *(data+1) = as_read_register(0x07); *(data+2) = as_read_register(0x08); }
// ************************************************************************************************* // // Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ // // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions // are met: // // Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // // Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the // distribution. // // Neither the name of Texas Instruments Incorporated nor the names of // its contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // // ************************************************************************************************* #ifndef VTI_AS_H_ #define VTI_AS_H_ // ************************************************************************************************* // Include section // ************************************************************************************************* // Prototypes section extern void as_init(void); extern void as_start(void); extern void as_stop(void); extern u8 as_read_register(u8 bAddress); extern u8 as_write_register(u8 bAddress, u8 bData); extern void as_get_data(u8 * data); // ************************************************************************************************* // Defines section // Disconnect power supply for acceleration sensor when not used #define AS_DISCONNECT // Port and pin resource for SPI interface to acceleration sensor // SDO=MOSI=P1.6, SDI=MISO=P1.5, SCK=P1.7 #define AS_SPI_IN (P1IN) #define AS_SPI_OUT (P1OUT) #define AS_SPI_DIR (P1DIR) #define AS_SPI_SEL (P1SEL) #define AS_SPI_REN (P1REN) #define AS_SDO_PIN (BIT6) #define AS_SDI_PIN (BIT5) #define AS_SCK_PIN (BIT7) // CSN=PJ.1 #define AS_CSN_OUT (PJOUT) #define AS_CSN_DIR (PJDIR) #define AS_CSN_PIN (BIT1) #define AS_TX_BUFFER (UCA0TXBUF) #define AS_RX_BUFFER (UCA0RXBUF) #define AS_TX_IFG (UCTXIFG) #define AS_RX_IFG (UCRXIFG) #define AS_IRQ_REG (UCA0IFG) #define AS_SPI_CTL0 (UCA0CTL0) #define AS_SPI_CTL1 (UCA0CTL1) #define AS_SPI_BR0 (UCA0BR0) #define AS_SPI_BR1 (UCA0BR1) // Port and pin resource for power-up of acceleration sensor, VDD=PJ.0 #define AS_PWR_OUT (PJOUT) #define AS_PWR_DIR (PJDIR) #define AS_PWR_PIN (BIT0) // Port, pin and interrupt resource for interrupt from acceleration sensor, CMA_INT=P2.5 #define AS_INT_IN (P2IN) #define AS_INT_OUT (P2OUT) #define AS_INT_DIR (P2DIR) #define AS_INT_IE (P2IE) #define AS_INT_IES (P2IES) #define AS_INT_IFG (P2IFG) #define AS_INT_PIN (BIT5) // SPI timeout to detect sensor failure #define SPI_TIMEOUT (1000u) // ************************************************************************************************* // Global Variable section // ************************************************************************************************* // Extern section #endif /*VTI_AS_H_*/