聚豐項目 > 小A管家
我們硬件用的CC3200加ZigBee的方法,ZigBee可以減少家里面布線,通過CC3200連接路由器接入互聯網,控制與顯示端我們選擇的是微信公眾號,微信公眾號可以快速擴展用戶群,借助微信的力量使我們的項目更具有潛力,并且支持語音控制,非常利于家里面的老人之類的。
152abcd6766
152abcd6766
團隊成員
152abcd6766 硬件
快樂無敵 軟件
整個項目是新浪云為平臺,CC3200為控制器,ZigBee為控制節點,微信公眾號為手機終端控制,其中CC3200用于網絡連接到新浪云,微信綁定新浪云,CC3200通信。并且可以采集數據,語音控制。
// Driverlib includes #include "hw_types.h" #include "hw_memmap.h" #include "hw_ints.h" #include "debug.h" #include "interrupt.h" #include "timer.h" #include "rom.h" #include "rom_map.h" #include "prcm.h" // TI-RTOS includes #if defined(USE_TIRTOS) || defined(USE_FREERTOS) || defined(SL_PLATFORM_MULTI_THREADED) #include <stdlib.h> #include "osi.h" #endif #include "timer_if.h" static unsigned char GetPeripheralIntNum(unsigned long ulBase, unsigned long ulTimer) { if(ulTimer == TIMER_A) { switch(ulBase) { case TIMERA0_BASE: return INT_TIMERA0A; case TIMERA1_BASE: return INT_TIMERA1A; case TIMERA2_BASE: return INT_TIMERA2A; case TIMERA3_BASE: return INT_TIMERA3A; default: return INT_TIMERA0A; } } else if(ulTimer == TIMER_B) { switch(ulBase) { case TIMERA0_BASE: return INT_TIMERA0B; case TIMERA1_BASE: return INT_TIMERA1B; case TIMERA2_BASE: return INT_TIMERA2B; case TIMERA3_BASE: return INT_TIMERA3B; default: return INT_TIMERA0B; } } else { return INT_TIMERA0A; } } //***************************************************************************** // //! Initializing the Timer //! //! \param ePeripheral is the peripheral which need to be initialized. //! \param ulBase is the base address for the timer. //! \param ulConfig is the configuration for the timer. //! \param ulTimer selects amoung the TIMER_A or TIMER_B or TIMER_BOTH. //! \param ulValue is the timer prescale value which must be between 0 and //! 255 (inclusive) for 16/32-bit timers and between 0 and 65535 (inclusive) //! for 32/64-bit timers. //! This function //! 1. Enables and reset the peripheral for the timer. //! 2. Configures and set the prescale value for the timer. //! //! \return none // //***************************************************************************** void Timer_IF_Init( unsigned long ePeripheral, unsigned long ulBase, unsigned long ulConfig, unsigned long ulTimer, unsigned long ulValue) { // // Initialize GPT A0 (in 32 bit mode) as periodic down counter. // MAP_PRCMPeripheralClkEnable(ePeripheral, PRCM_RUN_MODE_CLK); //允許定時器時鐘 允許外設時鐘 MAP_PRCMPeripheralReset(ePeripheral); //復位時鐘 MAP_TimerConfigure(ulBase,ulConfig); //配置定時器 MAP_TimerPrescaleSet(ulBase,ulTimer,ulValue); //設置預分頻 } //***************************************************************************** // //! setting up the timer //! //! \param ulBase is the base address for the timer. //! \param ulTimer selects between the TIMER_A or TIMER_B or TIMER_BOTH. //! \param TimerBaseIntHandler is the pointer to the function that handles the //! interrupt for the Timer //! //! This function //! 1. Register the function handler for the timer interrupt. //! 2. enables the timer interrupt. //! //! \return none // //***************************************************************************** void Timer_IF_IntSetup(unsigned long ulBase, unsigned long ulTimer, void (*TimerBaseIntHandler)(void)) { // // Setup the interrupts for the timer timeouts. // #if defined(USE_TIRTOS) || defined(USE_FREERTOS) || defined(SL_PLATFORM_MULTI_THREADED) // USE_TIRTOS: if app uses TI-RTOS (either networking/non-networking) // USE_FREERTOS: if app uses Free-RTOS (either networking/non-networking) // SL_PLATFORM_MULTI_THREADED: if app uses any OS + networking(simplelink) if(ulTimer == TIMER_BOTH) { osi_InterruptRegister(GetPeripheralIntNum(ulBase, TIMER_A), TimerBaseIntHandler, INT_PRIORITY_LVL_1); osi_InterruptRegister(GetPeripheralIntNum(ulBase, TIMER_B), TimerBaseIntHandler, INT_PRIORITY_LVL_1); } else { osi_InterruptRegister(GetPeripheralIntNum(ulBase, ulTimer), TimerBaseIntHandler, INT_PRIORITY_LVL_1); } #else MAP_IntPrioritySet(GetPeripheralIntNum(ulBase, ulTimer), INT_PRIORITY_LVL_1); MAP_TimerIntRegister(ulBase, ulTimer, TimerBaseIntHandler); #endif if(ulTimer == TIMER_BOTH) { MAP_TimerIntEnable(ulBase, TIMER_TIMA_TIMEOUT|TIMER_TIMB_TIMEOUT); } else { MAP_TimerIntEnable(ulBase, ((ulTimer == TIMER_A) ? TIMER_TIMA_TIMEOUT : TIMER_TIMB_TIMEOUT)); } } //***************************************************************************** // //! clears the timer interrupt //! //! \param ulBase is the base address for the timer. //! //! This function //! 1. clears the interrupt with given base. //! //! \return none // //***************************************************************************** void Timer_IF_InterruptClear(unsigned long ulBase) { unsigned long ulInts; ulInts = MAP_TimerIntStatus(ulBase, true); // // Clear the timer interrupt. // MAP_TimerIntClear(ulBase, ulInts); } //***************************************************************************** // //! starts the timer //! //! \param ulBase is the base address for the timer. //! \param ulTimer selects amoung the TIMER_A or TIMER_B or TIMER_BOTH. //! \param ulValue is the time delay in mSec after that run out, //! timer gives an interrupt. //! //! This function //! 1. Load the Timer with the specified value. //! 2. enables the timer. //! //! \return none //! //! \Note- HW Timer runs on 80MHz clock // //***************************************************************************** void Timer_IF_Start(unsigned long ulBase, unsigned long ulTimer, unsigned long ulValue) { MAP_TimerLoadSet(ulBase,ulTimer,MILLISECONDS_TO_TICKS(ulValue)); // // Enable the GPT // MAP_TimerEnable(ulBase,ulTimer); } //***************************************************************************** // //! disable the timer //! //! \param ulBase is the base address for the timer. //! \param ulTimer selects amoung the TIMER_A or TIMER_B or TIMER_BOTH. //! //! This function //! 1. disables the interupt. //! //! \return none // //***************************************************************************** void Timer_IF_Stop(unsigned long ulBase, unsigned long ulTimer) { // // Disable the GPT // MAP_TimerDisable(ulBase,ulTimer); } //***************************************************************************** // //! De-Initialize the timer //! //! \param uiGPTBaseAddr //! \param ulTimer //! //! This function //! 1. disable the timer interrupts //! 2. unregister the timer interrupt //! //! \return None. // //***************************************************************************** void Timer_IF_DeInit(unsigned long ulBase,unsigned long ulTimer) { // // Disable the timer interrupt // MAP_TimerIntDisable(ulBase,TIMER_TIMA_TIMEOUT|TIMER_TIMB_TIMEOUT); // // Unregister the timer interrupt // MAP_TimerIntUnregister(ulBase,ulTimer); } //***************************************************************************** // //! starts the timer //! //! \param ulBase is the base address for the timer. //! \param ulTimer selects between the TIMER A and TIMER B. //! \param ulValue is timer reload value (mSec) after which the timer will run out and gives an interrupt. //! //! This function //! 1. Reload the Timer with the specified value. //! //! \return none // //***************************************************************************** void Timer_IF_ReLoad(unsigned long ulBase, unsigned long ulTimer, unsigned long ulValue) { MAP_TimerLoadSet(ulBase,ulTimer,MILLISECONDS_TO_TICKS(ulValue)); } //***************************************************************************** // //! starts the timer //! //! \param ulBase is the base address for the timer. //! \param ulTimer selects amoung the TIMER_A or TIMER_B or TIMER_BOTH. //! //! This function //! 1. returns the timer value. //! //! \return Timer Value. // //***************************************************************************** unsigned int Timer_IF_GetCount(unsigned long ulBase, unsigned long ulTimer) { unsigned long ulCounter; ulCounter = MAP_TimerValueGet(ulBase, ulTimer); return 0xFFFFFFFF - ulCounter; } //***************************************************************************** // // Close the Doxygen group. //! @} // //*****************************************************************************
152abcd6766: 歡迎投票
回復
152abcd6766: 趕上cc3200出了問題,上傳很倉促,能不能更新作品?
回復
時間世界永遠: 可以分享一下項目源碼嗎?學習學習
回復
152abcd6766: 準備做下修改,當時的CC3200出問題了。
回復
152abcd6766: 我們準備更換主控,升級這套系統,有意者以成本價轉讓。
回復