Files
BLV_C1F_Module/BasicCode/Drive/BLE/HAL/MCU.c

274 lines
7.3 KiB
C
Raw Normal View History

/********************************** (C) COPYRIGHT *******************************
* File Name : MCU.c
* Author : WCH
* Version : V1.1
* Date : 2019/11/05
* Description : Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BLE<EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
*******************************************************************************/
/******************************************************************************/
/* ͷ<>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> */
#include "CH57x_common.h"
#include "HAL.h"
tmosTaskID halTaskID;
#if BLE_CODE_EN
__align(4) u32 MEM_BUF[BLE_MEMHEAP_SIZE/4]; //<2F><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>ջ<EFBFBD><D5BB>Ҫ<EFBFBD><D2AA><EFBFBD>ڴ<EFBFBD>
#endif
/*******************************************************************************
* @fn Lib_Calibration_LSI
*
* @brief <EFBFBD>ڲ<EFBFBD>32kУ׼
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param None.
*
* @return None.
*/
void Lib_Calibration_LSI( void )
{
if( Calibration_LSI() > 2 )
{
Calibration_LSI();
}
}
/*******************************************************************************
* @fn CH57X_BLEInit
*
* @brief BLE <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param None.
*
* @return None.
*/
#if BLE_CODE_EN
void CH57X_BLEInit( void )
{
uint8 i;
bleConfig_t cfg;
if( tmos_memcmp( VER_LIB,VER_FILE,strlen(VER_FILE)) == FALSE ){
PRINT("head file error...\n");
while(1);
}
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1; //д<><D0B4>0x57
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2; //<2F><>д<EFBFBD><D0B4>0xA8<41><38><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ16<31><36><EFBFBD><EFBFBD><EFBFBD>ڽ<EFBFBD><DABD>򿪰<EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>밲ȫ<EBB0B2><C8AB><EFBFBD><EFBFBD>ģʽ
R16_CLK_SYS_CFG = RB_CLK_OSC32M_XT|(2<<6)|0x08; // 32M -> Fsys <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵͳʱ<CDB3>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>32M<32><4D>Ϊϵͳ<CFB5><CDB3>Ƶ<EFBFBD><C6B5>
R8_SAFE_ACCESS_SIG = 0; //<2F>˳<EFBFBD><CBB3><EFBFBD>ȫģʽ
// SysTick_Config( SysTick_LOAD_RELOAD_Msk ); //<2F><><EFBFBD>õδ<C3B5><CEB4><EFBFBD>ʱ<EFBFBD><CAB1>
// SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk ; /* disable SysTick IRQ */
tmos_memset(&cfg,0,sizeof(bleConfig_t));
cfg.MEMAddr = (u32)MEM_BUF;
cfg.MEMLen = (u32)BLE_MEMHEAP_SIZE; //<2F><><EFBFBD><EFBFBD>Э<EFBFBD><D0AD>ջʹ<D5BB>õ<EFBFBD>RAM<41><4D>С<EFBFBD><D0A1><EFBFBD><EFBFBD>С<EFBFBD><D0A1>6K
cfg.BufMaxLen = (u32)BLE_BUFF_MAX_LEN; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cfg.BufNumber = (u32)BLE_BUFF_NUM; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD><C4B0><EFBFBD><EFBFBD><EFBFBD>
cfg.TxNumEvent = (u32)BLE_TX_NUM_EVENT; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD><EFBFBD>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD>ݰ<EFBFBD>
cfg.TxPower = (u32)BLE_TX_POWER; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B9A6>
#if (defined (BLE_SNV)) && (BLE_SNV == TRUE)
cfg.SNVAddr = (u32)BLE_SNV_ADDR;
#endif
#if( CLK_OSC32K )
cfg.SelRTCClock = (u32)CLK_OSC32K;
#endif
cfg.ConnectNumber = (PERIPHERAL_MAX_CONNECTION&3)|(CENTRAL_MAX_CONNECTION<<2); //
cfg.srandCB = SYS_GetSysTickCnt; //ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵij<D3B5><C4B3><EFBFBD>
#if (defined TEM_SAMPLE) && (TEM_SAMPLE == TRUE)
cfg.tsCB = HAL_GetInterTempValue; // <20><><EFBFBD><EFBFBD><EFBFBD>¶ȱ仯У׼RF<52><46><EFBFBD>ڲ<EFBFBD>RC( <20><><EFBFBD><EFBFBD>7<EFBFBD><37><EFBFBD>϶<EFBFBD> )
#if( CLK_OSC32K )
cfg.rcCB = Lib_Calibration_LSI; // <20>ڲ<EFBFBD>32Kʱ<4B><CAB1>У׼
#endif
#endif
#if (defined (HAL_SLEEP)) && (HAL_SLEEP == TRUE)
cfg.WakeUpTime = WAKE_UP_RTC_MAX_TIME;
cfg.sleepCB = CH57X_LowPower; // <20><><EFBFBD><EFBFBD>˯<EFBFBD><CBAF>
#endif
#if (defined (BLE_MAC)) && (BLE_MAC == TRUE)
for(i=0;i<6;i++) cfg.MacAddr[i] = MACAddr[5-i]; //MAC<41><43>ַ
#endif
if( !cfg.MEMAddr || cfg.MEMLen < 4*1024 )while(1);
#if (defined HAL_SLEEP) && (HAL_SLEEP == TRUE)
if( (u32)MEM_BUF < (u32)0x20003800 ){
PRINT("RAM config error...\n");
PRINT("MEM_BUF<EFBFBD><EFBFBD>%p\n", MEM_BUF);
PRINT("BLE_MEMHEAP_SIZE<EFBFBD><EFBFBD>%d\n", BLE_MEMHEAP_SIZE);
while(1);
}
#endif
i = BLE_LibInit( &cfg );
if(i){
PRINT("LIB init error code: %x ...\n",i);
while(1);
}
}
#endif
/*******************************************************************************
* @fn HAL_ProcessEvent
*
* @brief Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* input parameters
*
* @param task_id.
* @param events.
*
* output parameters
*
* @param events.
*
* @return None.
*/
tmosEvents HAL_ProcessEvent( tmosTaskID task_id, tmosEvents events )
{
uint8 * msgPtr;
if( events & SYS_EVENT_MSG ){ // <20><><EFBFBD><EFBFBD>HAL<41><4C><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>tmos_msg_receive<76><65>ȡ<EFBFBD><C8A1>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>
msgPtr = tmos_msg_receive(task_id); //receive a msg
if( msgPtr ){
/* De-allocate */
tmos_msg_deallocate( msgPtr ); //delete a msg
}
return events ^ SYS_EVENT_MSG;
}
if ( events & LED_BLINK_EVENT ){
#if (defined HAL_LED) && (HAL_LED == TRUE)
HalLedUpdate( );
#endif // HAL_LED
return events ^ LED_BLINK_EVENT;
}
if( events & HAL_KEY_EVENT ){
#if (defined HAL_KEY) && (HAL_KEY == TRUE)
HAL_KeyPoll(); /* Check for keys */
if (!Hal_KeyIntEnable){
tmos_start_task( halTaskID, HAL_KEY_EVENT, MS1_TO_SYSTEM_TIME(100) );
}
return events ^ HAL_KEY_EVENT;
#endif
}
if( events & HAL_REG_INIT_EVENT ){
#if (defined BLE_CALIBRATION_ENABLE) && (BLE_CALIBRATION_ENABLE == TRUE) // У׼<D0A3><D7BC><EFBFBD>񣬵<EFBFBD><F1A3ACB5><EFBFBD>У׼<D0A3><D7BC>ʱС<CAB1><D0A1>10ms
BLE_RegInit(); // У׼RF
#if( CLK_OSC32K )
Lib_Calibration_LSI(); // У׼<D0A3>ڲ<EFBFBD>RC
#endif
tmos_start_task( halTaskID , HAL_REG_INIT_EVENT ,MS1_TO_SYSTEM_TIME(BLE_CALIBRATION_PERIOD) );
return events ^ HAL_REG_INIT_EVENT;
#endif
}
if( events & HAL_TEST_EVENT ){
PRINT("* ");
tmos_start_task( halTaskID , HAL_TEST_EVENT ,MS1_TO_SYSTEM_TIME(10000) );
return events ^ HAL_TEST_EVENT;
}
return 0;
}
/*******************************************************************************
* @fn HAL_Init
*
* @brief Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param None.
*
* @return None.
*/
void HAL_Init( )
{
halTaskID = TMOS_ProcessEventRegister( HAL_ProcessEvent ); //ע<><D7A2>һ<EFBFBD><D2BB> TMOS <20>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ID
HAL_TimeInit( );
#if (defined HAL_SLEEP) && (HAL_SLEEP == TRUE)
HAL_SleepInit( );
#endif
#if (defined HAL_LED) && (HAL_LED == TRUE)
HAL_LedInit( );
#endif
#if (defined HAL_KEY) && (HAL_KEY == TRUE)
HAL_KeyInit( );
#endif
__enable_irq();
#if (defined BLE_CALIBRATION_ENABLE) && (BLE_CALIBRATION_ENABLE == TRUE)
tmos_start_task( halTaskID , HAL_REG_INIT_EVENT ,MS1_TO_SYSTEM_TIME(BLE_CALIBRATION_PERIOD) ); // <20><><EFBFBD><EFBFBD>У׼<D0A3><D7BC><EFBFBD>񣬵<EFBFBD><F1A3ACB5><EFBFBD>У׼<D0A3><D7BC>ʱС<CAB1><D0A1>10ms
#endif
// tmos_start_task( halTaskID , HAL_TEST_EVENT ,1000 ); // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
/*******************************************************************************
* @fn LLE_IRQHandler
*
* @brief LLE interrupt function
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param None.
*
* @return None.
*/
void LLE_IRQHandler(void)
{
BLE_IRQHandler();
}
/*******************************************************************************
* @fn HAL_GetInterTempValue
*
* @brief None.
*
* input parameters
*
* @param None.
*
* output parameters
*
* @param None.
*
* @return None.
*/
uint16 HAL_GetInterTempValue( void )
{
uint8 sensor,channel,config;
uint16 adc_data;
sensor = R8_TEM_SENSOR;
channel = R8_ADC_CHANNEL;
config = R8_ADC_CFG;
R8_TEM_SENSOR |= RB_TEM_SEN_PWR_ON;
R8_ADC_CHANNEL = CH_INTE_VTEMP;
R8_ADC_CFG = RB_ADC_POWER_ON|( 2<<4 ) ;
R8_ADC_CONVERT |= RB_ADC_START;
while( R8_ADC_CONVERT & RB_ADC_START );
adc_data = R16_ADC_DATA;
R8_TEM_SENSOR = sensor;
R8_ADC_CHANNEL = channel;
R8_ADC_CFG = config;
return( adc_data );
}
/******************************** endfile @ mcu ******************************/