mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-01-17 02:52:12 +01:00
OP-185 Flight helper functions for the firmware IAP object. Allows setting/clearing of back-up registers
git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1890 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
parent
5dae137af0
commit
20c6e2292a
122
flight/PiOS/Common/pios_iap.c
Normal file
122
flight/PiOS/Common/pios_iap.c
Normal file
@ -0,0 +1,122 @@
|
||||
/*!
|
||||
* @File iap.c
|
||||
* @Brief
|
||||
*
|
||||
* Created on: Sep 6, 2010
|
||||
* Author: joe
|
||||
*/
|
||||
|
||||
|
||||
/****************************************************************************************
|
||||
* Header files
|
||||
****************************************************************************************/
|
||||
#include "openpilot.h"
|
||||
|
||||
/****************************************************************************************
|
||||
* Private Definitions/Macros
|
||||
****************************************************************************************/
|
||||
|
||||
/* these definitions reside here for protection and privacy. */
|
||||
#define IAP_MAGIC_WORD_1 0x1122
|
||||
#define IAP_MAGIC_WORD_2 0xAA55
|
||||
|
||||
#define IAP_REQLOC_1 BKP_DR1
|
||||
#define IAP_CRCLOC_LOW BKP_DR2
|
||||
#define IAP_CRCLOC_UPPER BKP_DR3
|
||||
#define IAP_PORTLOC BKP_DR4
|
||||
#define IAP_REQLOC_2 BKP_RR5
|
||||
|
||||
#define IAP_UPLOAD_REQ_1 0x20AA
|
||||
#define IAP_UPLOAD_REQ_2 0x2055
|
||||
#define IAP_DNLOAD_REQ_1 0x30AA
|
||||
#define IAP_DNLOAD_REQ_2 0x3055
|
||||
|
||||
#define UPPERWORD16(lw) (uint16_t)((uint32_t)(lw)>>16)
|
||||
#define LOWERWORD16(lw) (uint16_t)((uint32_t)(lw)&0x0000ffff)
|
||||
#define UPPERBYTE(w) (uint8_t)((w)>>8)
|
||||
#define LOWERBYTE(w) (uint8_t)((w)&0x00ff)
|
||||
|
||||
/****************************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************************/
|
||||
|
||||
/****************************************************************************************
|
||||
* Private (static) Data
|
||||
****************************************************************************************/
|
||||
|
||||
/****************************************************************************************
|
||||
* Public/Global Data
|
||||
****************************************************************************************/
|
||||
|
||||
/*!
|
||||
* \brief PIOS_IAP_Init - performs required initializations for iap module.
|
||||
* \param none.
|
||||
* \return none.
|
||||
* \retval none.
|
||||
*
|
||||
* Created: Sep 8, 2010 10:10:48 PM by joe
|
||||
*/
|
||||
void PIOS_IAP_Init( void )
|
||||
{
|
||||
/* Enable CRC clock */
|
||||
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);
|
||||
|
||||
/* Enable PWR and BKP clock */
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
|
||||
|
||||
/* Enable write access to Backup domain */
|
||||
PWR_BackupAccessCmd(ENABLE);
|
||||
|
||||
/* Clear Tamper pin Event(TE) pending flag */
|
||||
BKP_ClearFlag();
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Determines if an In-Application-Programming request has been made.
|
||||
* \param *comm - Which communication stream to use for the IAP (USB, Telemetry, I2C, SPI, etc)
|
||||
* \return TRUE - if correct sequence found, along with 'comm' updated.
|
||||
* FALSE - Note that 'comm' will have an invalid comm identifier.
|
||||
* \retval
|
||||
*
|
||||
*/
|
||||
uint32_t PIOS_IAP_CheckRequest( void )
|
||||
{
|
||||
uint32_t retval = FALSE;
|
||||
uint16_t reg1;
|
||||
uint16_t reg2;
|
||||
|
||||
reg1 = BKP_ReadBackupRegister( MAGIC_REG_1 );
|
||||
reg2 = BKP_ReadBackupRegister( MAGIC_REG_2 );
|
||||
|
||||
if( reg1 == IAP_MAGIC_WORD_1 && reg2 == IAP_MAGIC_WORD_2 ) {
|
||||
// We have a match.
|
||||
retval = TRUE;
|
||||
} else {
|
||||
retval = FALSE;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*!
|
||||
* \brief Sets the 1st word of the request sequence.
|
||||
* \param n/a
|
||||
* \return n/a
|
||||
* \retval
|
||||
*/
|
||||
void PIOS_IAP_SetRequest1(void)
|
||||
{
|
||||
BKP_WriteBackupRegister( MAGIC_REG_1, IAP_MAGIC_WORD_1);
|
||||
}
|
||||
|
||||
void PIOS_IAP_SetRequest2(void)
|
||||
{
|
||||
BKP_WriteBackupRegister( MAGIC_REG_2, IAP_MAGIC_WORD_2);
|
||||
}
|
||||
|
||||
void PIOS_IAP_ClearRequest(void)
|
||||
{
|
||||
BKP_WriteBackupRegister( MAGIC_REG_1, 0);
|
||||
BKP_WriteBackupRegister( MAGIC_REG_2, 0);
|
||||
}
|
48
flight/PiOS/inc/pios_iap.h
Normal file
48
flight/PiOS/inc/pios_iap.h
Normal file
@ -0,0 +1,48 @@
|
||||
/*!
|
||||
* @File iap.h
|
||||
* @Brief Header file for the In-Application-Programming Module
|
||||
*
|
||||
* Created on: Sep 6, 2010
|
||||
* Author: joe
|
||||
*/
|
||||
|
||||
#ifndef PIOS_IAP_H_
|
||||
#define PIOS_IAP_H_
|
||||
|
||||
|
||||
/****************************************************************************************
|
||||
* Header files
|
||||
****************************************************************************************/
|
||||
|
||||
/*****************************************************************************************
|
||||
* Public Definitions/Macros
|
||||
****************************************************************************************/
|
||||
#define MAGIC_REG_1 BKP_DR1
|
||||
#define MAGIC_REG_2 BKP_DR2
|
||||
#define IAP_COMM BKP_DR3
|
||||
|
||||
#define IAP_COMM_INVALID 0
|
||||
#define IAP_COMM_USB 1
|
||||
#define IAP_COMM_TELEMETRY 2
|
||||
#define IAP_COMM_SPI_AHRS 3
|
||||
#define IAP_COMM_I2C 4
|
||||
// Additional types can be added along with the proper support code.
|
||||
|
||||
/****************************************************************************************
|
||||
* Public Functions
|
||||
****************************************************************************************/
|
||||
void PIOS_IAP_Init(void);
|
||||
uint32_t PIOS_IAP_CRCVerify( void );
|
||||
uint32_t PIOS_IAP_CheckRequest( void );
|
||||
void PIOS_IAP_SetCommInput( uint16_t comm );
|
||||
uint16_t PIOS_IAP_GetCommInput( void );
|
||||
void PIOS_IAP_SetRequest1(void);
|
||||
void PIOS_IAP_SetRequest2(void);
|
||||
void PIOS_IAP_ClearRequest(void);
|
||||
void PIOS_IAP_SetCRC( uint32_t crcval );
|
||||
|
||||
/****************************************************************************************
|
||||
* Public Data
|
||||
****************************************************************************************/
|
||||
|
||||
#endif /* PIOS_IAP_H_ */
|
Loading…
x
Reference in New Issue
Block a user