main
This commit is contained in:
264
SYSTEM/delay/delay.c
Normal file
264
SYSTEM/delay/delay.c
Normal file
@ -0,0 +1,264 @@
|
||||
#include "delay.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9>OS,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>.
|
||||
#if SYSTEM_SUPPORT_OS
|
||||
#include "includes.h" //ucos ʹ<><CAB9>
|
||||
#endif
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ʹ<><CAB9>SysTick<63><6B><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>ӳٽ<D3B3><D9BD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʺ<EFBFBD>STM32F10xϵ<78>У<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>delay_us,delay_ms
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2010/1/1
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.8
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//V1.2<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>е<EFBFBD><D0B5>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><>ֹ<EFBFBD><D6B9>ʱ<EFBFBD><CAB1>ȷ,<2C><><EFBFBD><EFBFBD>do while<6C>ṹ!
|
||||
//V1.3<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>UCOSII<49><49>ʱ<EFBFBD><CAB1>֧<EFBFBD><D6A7>.
|
||||
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ucosII,delay_init<69><74><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>SYSTICK<43><4B>ֵ,ʹ֮<CAB9><D6AE>ucos<6F><73>TICKS_PER_SEC<45><43>Ӧ.
|
||||
//delay_ms<6D><73>delay_usҲ<73><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ucos<6F>ĸ<EFBFBD><C4B8><EFBFBD>.
|
||||
//delay_us<75><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ucos<6F><73>ʹ<EFBFBD><CAB9>,<2C><><EFBFBD><EFBFBD>ȷ<D7BC>Ⱥܸ<C8BA>,<2C><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ռ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>Ķ<EFBFBD>ʱ<EFBFBD><CAB1>.
|
||||
//delay_ms<6D><73>ucos<6F><73>,<2C><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>OSTimeDly<6C><79><EFBFBD><EFBFBD>,<2C><>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ucosʱ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>delay_usʵ<73><CAB5>,<2C>Ӷ<EFBFBD>ȷ<D7BC><C8B7>ʱ
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ucos֮<73><D6AE>delay_ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>,ѡ<><D1A1>OSTimeDlyʵ<79>ֻ<EFBFBD><D6BB><EFBFBD>delay_usʵ<73><CAB5>.
|
||||
//V1.4<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> 20110929
|
||||
//<2F><EFBFBD><DEB8><EFBFBD>ʹ<EFBFBD><CAB9>ucos,<2C><><EFBFBD><EFBFBD>ucosδ<73><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,delay_ms<6D><73><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><DEB7><EFBFBD>Ӧ<EFBFBD><D3A6>bug.
|
||||
//V1.5<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> 20120902
|
||||
//<2F><>delay_us<75><73><EFBFBD><EFBFBD>ucos<6F><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>ucos<6F><73><EFBFBD><EFBFBD>delay_us<75><73>ִ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5>µ<EFBFBD><C2B5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><D7BC>
|
||||
//V1.6<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> 20150109
|
||||
//<2F><>delay_ms<6D><73><EFBFBD><EFBFBD>OSLockNesting<6E>жϡ<D0B6>
|
||||
//V1.7<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> 20150319
|
||||
//<2F><EFBFBD>OS֧<53>ַ<EFBFBD>ʽ,<2C><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UCOSII<49><49>UCOSIII,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>)
|
||||
//<2F><><EFBFBD><EFBFBD>:delay_osrunning/delay_ostickspersec/delay_osintnesting<6E><67><EFBFBD><EFBFBD><EFBFBD>궨<EFBFBD><EAB6A8>
|
||||
//<2F><><EFBFBD><EFBFBD>:delay_osschedlock/delay_osschedunlock/delay_ostimedly<6C><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//V1.8<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> 20150519
|
||||
//<2F><><EFBFBD><EFBFBD>UCOSIII֧<49><D6A7>ʱ<EFBFBD><CAB1>2<EFBFBD><32>bug<75><67>
|
||||
//delay_tickspersec<65><63>Ϊ<EFBFBD><CEAA>delay_ostickspersec
|
||||
//delay_intnesting<6E><67>Ϊ<EFBFBD><CEAA>delay_osintnesting
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static u8 fac_us=0; //us<75><73>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
static u16 fac_ms=0; //ms<6D><73>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ucos<6F><73>,<2C><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ms<6D><73>
|
||||
|
||||
|
||||
#if SYSTEM_SUPPORT_OS //<2F><><EFBFBD><EFBFBD>SYSTEM_SUPPORT_OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,˵<><CBB5>Ҫ֧<D2AA><D6A7>OS<4F><53>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UCOS).
|
||||
//<2F><>delay_us/delay_ms<6D><73>Ҫ֧<D2AA><D6A7>OS<4F><53>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<4F><53><EFBFBD>صĺ궨<C4BA><EAB6A8><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD>궨<EFBFBD><EAB6A8>:
|
||||
// delay_osrunning:<3A><><EFBFBD>ڱ<EFBFBD>ʾOS<4F><53>ǰ<EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>Ծ<EFBFBD><D4BE><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>
|
||||
//delay_ostickspersec:<3A><><EFBFBD>ڱ<EFBFBD>ʾOS<4F>趨<EFBFBD><E8B6A8>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>,delay_init<69><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>systick
|
||||
// delay_osintnesting:<3A><><EFBFBD>ڱ<EFBFBD>ʾOS<4F>ж<EFBFBD>Ƕ<EFBFBD><EFBFBD><D7BC><EFBFBD>,<2C><>Ϊ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>治<EFBFBD><E6B2BB><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>,delay_msʹ<73>øò<C3B8><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//Ȼ<><C8BB><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
|
||||
// delay_osschedlock:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
//delay_osschedunlock:<3A><><EFBFBD>ڽ<EFBFBD><DABD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>¿<EFBFBD><C2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// delay_ostimedly:<3A><><EFBFBD><EFBFBD>OS<4F><53>ʱ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD><CCBD><EFBFBD>UCOSII<49><49>UCOSIII<49><49>֧<EFBFBD><D6A7>,<2C><><EFBFBD><EFBFBD>OS,<2C><><EFBFBD><EFBFBD><EFBFBD>вο<D0B2><CEBF><EFBFBD><EFBFBD><EFBFBD>ֲ
|
||||
//֧<><D6A7>UCOSII
|
||||
#ifdef OS_CRITICAL_METHOD //OS_CRITICAL_METHOD<4F><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,˵<><CBB5>Ҫ֧<D2AA><D6A7>UCOSII
|
||||
#define delay_osrunning OSRunning //OS<4F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>,0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define delay_ostickspersec OS_TICKS_PER_SEC //OSʱ<53>ӽ<EFBFBD><D3BD><EFBFBD>,<2C><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>
|
||||
#define delay_osintnesting OSIntNesting //<2F>ж<EFBFBD>Ƕ<EFBFBD><EFBFBD><D7BC><EFBFBD>,<2C><><EFBFBD>ж<EFBFBD>Ƕ<EFBFBD>״<EFBFBD><D7B4><EFBFBD>
|
||||
#endif
|
||||
|
||||
//֧<><D6A7>UCOSIII
|
||||
#ifdef CPU_CFG_CRITICAL_METHOD //CPU_CFG_CRITICAL_METHOD<4F><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,˵<><CBB5>Ҫ֧<D2AA><D6A7>UCOSIII
|
||||
#define delay_osrunning OSRunning //OS<4F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>,0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;1,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define delay_ostickspersec OSCfg_TickRate_Hz //OSʱ<53>ӽ<EFBFBD><D3BD><EFBFBD>,<2C><>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>
|
||||
#define delay_osintnesting OSIntNestingCtr //<2F>ж<EFBFBD>Ƕ<EFBFBD><EFBFBD><D7BC><EFBFBD>,<2C><><EFBFBD>ж<EFBFBD>Ƕ<EFBFBD>״<EFBFBD><D7B4><EFBFBD>
|
||||
#endif
|
||||
|
||||
|
||||
//us<75><73><EFBFBD><EFBFBD>ʱʱ,<2C>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>us<75><73><EFBFBD>ӳ<EFBFBD>)
|
||||
void delay_osschedlock(void)
|
||||
{
|
||||
#ifdef CPU_CFG_CRITICAL_METHOD //ʹ<><CAB9>UCOSIII
|
||||
OS_ERR err;
|
||||
OSSchedLock(&err); //UCOSIII<49>ķ<EFBFBD>ʽ,<2C><>ֹ<EFBFBD><D6B9><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>us<75><73>ʱ
|
||||
#else //<2F><><EFBFBD><EFBFBD>UCOSII
|
||||
OSSchedLock(); //UCOSII<49>ķ<EFBFBD>ʽ,<2C><>ֹ<EFBFBD><D6B9><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>us<75><73>ʱ
|
||||
#endif
|
||||
}
|
||||
|
||||
//us<75><73><EFBFBD><EFBFBD>ʱʱ,<2C>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void delay_osschedunlock(void)
|
||||
{
|
||||
#ifdef CPU_CFG_CRITICAL_METHOD //ʹ<><CAB9>UCOSIII
|
||||
OS_ERR err;
|
||||
OSSchedUnlock(&err); //UCOSIII<49>ķ<EFBFBD>ʽ,<2C>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
#else //<2F><><EFBFBD><EFBFBD>UCOSII
|
||||
OSSchedUnlock(); //UCOSII<49>ķ<EFBFBD>ʽ,<2C>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>
|
||||
#endif
|
||||
}
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>OS<4F>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
||||
//ticks:<3A><>ʱ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void delay_ostimedly(u32 ticks)
|
||||
{
|
||||
#ifdef CPU_CFG_CRITICAL_METHOD
|
||||
OS_ERR err;
|
||||
OSTimeDly(ticks,OS_OPT_TIME_PERIODIC,&err); //UCOSIII<49><49>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
||||
#else
|
||||
OSTimeDly(ticks); //UCOSII<49><49>ʱ
|
||||
#endif
|
||||
}
|
||||
|
||||
//systick<63>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ʹ<><CAB9>ucosʱ<73>õ<EFBFBD>
|
||||
void SysTick_Handler(void)
|
||||
{
|
||||
if(delay_osrunning==1) //OS<4F><53>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>,<2C><>ִ<EFBFBD><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><C4B5>ȴ<EFBFBD><C8B4><EFBFBD>
|
||||
{
|
||||
OSIntEnter(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
OSTimeTick(); //<2F><><EFBFBD><EFBFBD>ucos<6F><73>ʱ<EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
OSIntExit(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD>ӳٺ<D3B3><D9BA><EFBFBD>
|
||||
//<2F><>ʹ<EFBFBD><CAB9>OS<4F><53>ʱ<EFBFBD><CAB1>,<2C>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>OS<4F><53>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
||||
//SYSTICK<43><4B>ʱ<EFBFBD>ӹ̶<D3B9>ΪHCLKʱ<4B>ӵ<EFBFBD>1/8
|
||||
//SYSCLK:ϵͳʱ<CDB3><CAB1>
|
||||
void delay_init()
|
||||
{
|
||||
#if SYSTEM_SUPPORT_OS //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֧<D2AA><D6A7>OS.
|
||||
u32 reload;
|
||||
#endif
|
||||
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //ѡ<><D1A1><EFBFBD>ⲿʱ<E2B2BF><CAB1> HCLK/8
|
||||
fac_us=SystemCoreClock/8000000; //Ϊϵͳʱ<CDB3>ӵ<EFBFBD>1/8
|
||||
#if SYSTEM_SUPPORT_OS //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֧<D2AA><D6A7>OS.
|
||||
reload=SystemCoreClock/8000000; //ÿ<><C3BF><EFBFBD>ӵļ<D3B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>λΪK
|
||||
reload*=1000000/delay_ostickspersec; //<2F><><EFBFBD><EFBFBD>delay_ostickspersec<65>趨<EFBFBD><E8B6A8><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
//reloadΪ24λ<34>Ĵ<EFBFBD><C4B4><EFBFBD>,<2C><><EFBFBD><EFBFBD>ֵ:16777216,<2C><>72M<32><4D>,Լ<><D4BC>1.86s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
fac_ms=1000/delay_ostickspersec; //<2F><><EFBFBD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ٵ<EFBFBD>λ
|
||||
|
||||
SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; //<2F><><EFBFBD><EFBFBD>SYSTICK<43>ж<EFBFBD>
|
||||
SysTick->LOAD=reload; //ÿ1/delay_ostickspersec<65><63><EFBFBD>ж<EFBFBD>һ<EFBFBD><D2BB>
|
||||
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //<2F><><EFBFBD><EFBFBD>SYSTICK
|
||||
|
||||
#else
|
||||
fac_ms=(u16)fac_us*1000; //<2F><>OS<4F><53>,<2C><><EFBFBD><EFBFBD>ÿ<EFBFBD><C3BF>ms<6D><73>Ҫ<EFBFBD><D2AA>systickʱ<6B><CAB1><EFBFBD><EFBFBD>
|
||||
#endif
|
||||
}
|
||||
|
||||
#if SYSTEM_SUPPORT_OS //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ֧<D2AA><D6A7>OS.
|
||||
//<2F><>ʱnus
|
||||
//nusΪҪ<CEAA><D2AA>ʱ<EFBFBD><CAB1>us<75><73>.
|
||||
void delay_us(u32 nus)
|
||||
{
|
||||
u32 ticks;
|
||||
u32 told,tnow,tcnt=0;
|
||||
u32 reload=SysTick->LOAD; //LOAD<41><44>ֵ
|
||||
ticks=nus*fac_us; //<2F><>Ҫ<EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD>
|
||||
tcnt=0;
|
||||
delay_osschedlock(); //<2F><>ֹOS<4F><53><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>us<75><73>ʱ
|
||||
told=SysTick->VAL; //<2F>ս<EFBFBD><D5BD><EFBFBD>ʱ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
while(1)
|
||||
{
|
||||
tnow=SysTick->VAL;
|
||||
if(tnow!=told)
|
||||
{
|
||||
if(tnow<told)tcnt+=told-tnow; //<2F><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>һ<EFBFBD><D2BB>SYSTICK<43><4B>һ<EFBFBD><D2BB><EFBFBD>ݼ<EFBFBD><DDBC>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><CDBF><EFBFBD><EFBFBD><EFBFBD>.
|
||||
else tcnt+=reload-tnow+told;
|
||||
told=tnow;
|
||||
if(tcnt>=ticks)break; //ʱ<>䳬<EFBFBD><E4B3AC>/<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ӳٵ<D3B3>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD>˳<EFBFBD>.
|
||||
}
|
||||
};
|
||||
delay_osschedunlock(); //<2F>ָ<EFBFBD>OS<4F><53><EFBFBD><EFBFBD>
|
||||
}
|
||||
//<2F><>ʱnms
|
||||
//nms:Ҫ<><D2AA>ʱ<EFBFBD><CAB1>ms<6D><73>
|
||||
void delay_ms(u16 nms)
|
||||
{
|
||||
if(delay_osrunning&&delay_osintnesting==0) //<2F><><EFBFBD><EFBFBD>OS<4F>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>(<28>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>治<EFBFBD><E6B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
||||
{
|
||||
if(nms>=fac_ms) //<2F><>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
delay_ostimedly(nms/fac_ms); //OS<4F><53>ʱ
|
||||
}
|
||||
nms%=fac_ms; //OS<4F>Ѿ<EFBFBD><D1BE><EFBFBD><DEB7>ṩ<EFBFBD><E1B9A9>ôС<C3B4><D0A1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>ʽ<EFBFBD><CABD>ʱ
|
||||
}
|
||||
delay_us((u32)(nms*1000)); //<2F><>ͨ<EFBFBD><CDA8>ʽ<EFBFBD><CABD>ʱ
|
||||
}
|
||||
#else //<2F><><EFBFBD><EFBFBD>OSʱ
|
||||
//<2F><>ʱnus
|
||||
//nusΪҪ<CEAA><D2AA>ʱ<EFBFBD><CAB1>us<75><73>.
|
||||
void delay_us(u32 nus)
|
||||
{
|
||||
u32 temp;
|
||||
SysTick->LOAD=nus*fac_us; //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->VAL=0x00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
do
|
||||
{
|
||||
temp=SysTick->CTRL;
|
||||
}while((temp&0x01)&&!(temp&(1<<16))); //<2F>ȴ<EFBFBD>ʱ<EFBFBD>䵽<EFBFBD><E4B5BD>
|
||||
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->VAL =0X00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
//<2F><>ʱnms
|
||||
//ע<><D7A2>nms<6D>ķ<EFBFBD>Χ
|
||||
//SysTick->LOADΪ24λ<34>Ĵ<EFBFBD><C4B4><EFBFBD>,<2C><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱΪ:
|
||||
//nms<=0xffffff*8*1000/SYSCLK
|
||||
//SYSCLK<4C><4B>λΪHz,nms<6D><73>λΪms
|
||||
//<2F><>72M<32><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,nms<=1864
|
||||
void delay_ms(u16 nms)
|
||||
{
|
||||
u32 temp;
|
||||
SysTick->LOAD=(u32)nms*fac_ms; //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(SysTick->LOADΪ24bit)
|
||||
SysTick->VAL =0x00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
do
|
||||
{
|
||||
temp=SysTick->CTRL;
|
||||
}while((temp&0x01)&&!(temp&(1<<16))); //<2F>ȴ<EFBFBD>ʱ<EFBFBD>䵽<EFBFBD><E4B5BD>
|
||||
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk; //<2F>رռ<D8B1><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
SysTick->VAL =0X00; //<2F><><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
76
SYSTEM/delay/delay.h
Normal file
76
SYSTEM/delay/delay.h
Normal file
@ -0,0 +1,76 @@
|
||||
#ifndef __DELAY_H
|
||||
#define __DELAY_H
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ʹ<><CAB9>SysTick<63><6B><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>ӳٽ<D3B3><D9BD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʺ<EFBFBD>STM32F10xϵ<78>У<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>delay_us,delay_ms
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2010/1/1
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.8
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//V1.2<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>е<EFBFBD><D0B5>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
|
||||
//<2F><>ֹ<EFBFBD><D6B9>ʱ<EFBFBD><CAB1>ȷ,<2C><><EFBFBD><EFBFBD>do while<6C>ṹ!
|
||||
//V1.3<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>˶<EFBFBD>UCOSII<49><49>ʱ<EFBFBD><CAB1>֧<EFBFBD><D6A7>.
|
||||
//<2F><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>ucosII,delay_init<69><74><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>SYSTICK<43><4B>ֵ,ʹ֮<CAB9><D6AE>ucos<6F><73>TICKS_PER_SEC<45><43>Ӧ.
|
||||
//delay_ms<6D><73>delay_usҲ<73><D2B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ucos<6F>ĸ<EFBFBD><C4B8><EFBFBD>.
|
||||
//delay_us<75><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ucos<6F><73>ʹ<EFBFBD><CAB9>,<2C><><EFBFBD><EFBFBD>ȷ<D7BC>Ⱥܸ<C8BA>,<2C><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>û<EFBFBD><C3BB>ռ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD>Ķ<EFBFBD>ʱ<EFBFBD><CAB1>.
|
||||
//delay_ms<6D><73>ucos<6F><73>,<2C><><EFBFBD>Ե<EFBFBD><D4B5><EFBFBD>OSTimeDly<6C><79><EFBFBD><EFBFBD>,<2C><>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ucosʱ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>delay_usʵ<73><CAB5>,<2C>Ӷ<EFBFBD>ȷ<D7BC><C8B7>ʱ
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ucos֮<73><D6AE>delay_ms<6D><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>,ѡ<><D1A1>OSTimeDlyʵ<79>ֻ<EFBFBD><D6BB><EFBFBD>delay_usʵ<73><CAB5>.
|
||||
//V1.4<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> 20110929
|
||||
//<2F><EFBFBD><DEB8><EFBFBD>ʹ<EFBFBD><CAB9>ucos,<2C><><EFBFBD><EFBFBD>ucosδ<73><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>,delay_ms<6D><73><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><DEB7><EFBFBD>Ӧ<EFBFBD><D3A6>bug.
|
||||
//V1.5<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> 20120902
|
||||
//<2F><>delay_us<75><73><EFBFBD><EFBFBD>ucos<6F><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>ucos<6F><73><EFBFBD><EFBFBD>delay_us<75><73>ִ<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ܵ<EFBFBD><DCB5>µ<EFBFBD><C2B5><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><D7BC>
|
||||
//V1.6<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> 20150109
|
||||
//<2F><>delay_ms<6D><73><EFBFBD><EFBFBD>OSLockNesting<6E>жϡ<D0B6>
|
||||
//V1.7<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> 20150319
|
||||
//<2F><EFBFBD>OS֧<53>ַ<EFBFBD>ʽ,<2C><>֧<EFBFBD><D6A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UCOSII<49><49>UCOSIII,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>OS<4F><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>)
|
||||
//<2F><><EFBFBD><EFBFBD>:delay_osrunning/delay_ostickspersec/delay_osintnesting<6E><67><EFBFBD><EFBFBD><EFBFBD>궨<EFBFBD><EAB6A8>
|
||||
//<2F><><EFBFBD><EFBFBD>:delay_osschedlock/delay_osschedunlock/delay_ostimedly<6C><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//V1.8<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD> 20150519
|
||||
//<2F><><EFBFBD><EFBFBD>UCOSIII֧<49><D6A7>ʱ<EFBFBD><CAB1>2<EFBFBD><32>bug<75><67>
|
||||
//delay_tickspersec<65><63>Ϊ<EFBFBD><CEAA>delay_ostickspersec
|
||||
//delay_intnesting<6E><67>Ϊ<EFBFBD><CEAA>delay_osintnesting
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void delay_init(void);
|
||||
void delay_ms(u16 nms);
|
||||
void delay_us(u32 nus);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
37
SYSTEM/sys/sys.c
Normal file
37
SYSTEM/sys/sys.c
Normal file
@ -0,0 +1,37 @@
|
||||
#include "sys.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK Mini STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//ϵͳ<CFB5>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:2012/9/10
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.4
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD> 2009-2019
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//THUMBָ<42>֧<EEB2BB>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD>ʵ<EFBFBD><CAB5>ִ<EFBFBD>л<EFBFBD><D0BB><EFBFBD>ָ<EFBFBD><D6B8>WFI
|
||||
void WFI_SET(void)
|
||||
{
|
||||
__ASM volatile("wfi");
|
||||
}
|
||||
//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
void INTX_DISABLE(void)
|
||||
{
|
||||
__ASM volatile("cpsid i");
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
void INTX_ENABLE(void)
|
||||
{
|
||||
__ASM volatile("cpsie i");
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ַ
|
||||
//addr:ջ<><D5BB><EFBFBD><EFBFBD>ַ
|
||||
__asm void MSR_MSP(u32 addr)
|
||||
{
|
||||
MSR MSP, r0 //set Main Stack value
|
||||
BX r14
|
||||
}
|
||||
73
SYSTEM/sys/sys.h
Normal file
73
SYSTEM/sys/sys.h
Normal file
@ -0,0 +1,73 @@
|
||||
#ifndef __SYS_H
|
||||
#define __SYS_H
|
||||
#include "stm32f10x.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
|
||||
//ALIENTEK STM32<33><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
|
||||
//<2F><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>:2012/8/18
|
||||
//<2F>汾<EFBFBD><E6B1BE>V1.7
|
||||
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
|
||||
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾ 2009-2019
|
||||
//All rights reserved
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//0,<2C><>֧<EFBFBD><D6A7>ucos
|
||||
//1,֧<><D6A7>ucos
|
||||
#define SYSTEM_SUPPORT_OS 0 //<2F><><EFBFBD><EFBFBD>ϵͳ<CFB5>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ƿ<EFBFBD>֧<EFBFBD><D6A7>UCOS
|
||||
|
||||
|
||||
//λ<><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,ʵ<><CAB5>51<35><31><EFBFBD>Ƶ<EFBFBD>GPIO<49><4F><EFBFBD>ƹ<EFBFBD><C6B9><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>˼<EFBFBD><CBBC>,<2C>ο<EFBFBD><<CM3Ȩ<33><C8A8>ָ<EFBFBD><D6B8>>><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(87ҳ~92ҳ).
|
||||
//IO<49>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>궨<EFBFBD><EAB6A8>
|
||||
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
|
||||
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
|
||||
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
|
||||
//IO<49>ڵ<EFBFBD>ַӳ<D6B7><D3B3>
|
||||
#define GPIOA_ODR_Addr (GPIOA_BASE+12) //0x4001080C
|
||||
#define GPIOB_ODR_Addr (GPIOB_BASE+12) //0x40010C0C
|
||||
#define GPIOC_ODR_Addr (GPIOC_BASE+12) //0x4001100C
|
||||
#define GPIOD_ODR_Addr (GPIOD_BASE+12) //0x4001140C
|
||||
#define GPIOE_ODR_Addr (GPIOE_BASE+12) //0x4001180C
|
||||
#define GPIOF_ODR_Addr (GPIOF_BASE+12) //0x40011A0C
|
||||
#define GPIOG_ODR_Addr (GPIOG_BASE+12) //0x40011E0C
|
||||
|
||||
#define GPIOA_IDR_Addr (GPIOA_BASE+8) //0x40010808
|
||||
#define GPIOB_IDR_Addr (GPIOB_BASE+8) //0x40010C08
|
||||
#define GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008
|
||||
#define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408
|
||||
#define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808
|
||||
#define GPIOF_IDR_Addr (GPIOF_BASE+8) //0x40011A08
|
||||
#define GPIOG_IDR_Addr (GPIOG_BASE+8) //0x40011E08
|
||||
|
||||
//IO<49>ڲ<EFBFBD><DAB2><EFBFBD>,ֻ<>Ե<EFBFBD>һ<EFBFBD><D2BB>IO<49><4F>!
|
||||
//ȷ<><C8B7>n<EFBFBD><6E>ֵС<D6B5><D0A1>16!
|
||||
#define PAout(n) BIT_ADDR(GPIOA_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
#define PAin(n) BIT_ADDR(GPIOA_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
#define PBout(n) BIT_ADDR(GPIOB_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
#define PBin(n) BIT_ADDR(GPIOB_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
#define PCin(n) BIT_ADDR(GPIOC_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
#define PDout(n) BIT_ADDR(GPIOD_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
#define PDin(n) BIT_ADDR(GPIOD_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
#define PEout(n) BIT_ADDR(GPIOE_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
#define PEin(n) BIT_ADDR(GPIOE_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
#define PFout(n) BIT_ADDR(GPIOF_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
#define PFin(n) BIT_ADDR(GPIOF_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
#define PGout(n) BIT_ADDR(GPIOG_ODR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
#define PGin(n) BIT_ADDR(GPIOG_IDR_Addr,n) //<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ຯ<EFBFBD><E0BAAF>
|
||||
void WFI_SET(void); //ִ<><D6B4>WFIָ<49><D6B8>
|
||||
void INTX_DISABLE(void);//<2F>ر<EFBFBD><D8B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
void INTX_ENABLE(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
void MSR_MSP(u32 addr); //<2F><><EFBFBD>ö<EFBFBD>ջ<EFBFBD><D5BB>ַ
|
||||
|
||||
#endif
|
||||
76
SYSTEM/thb6128/thb6128.c
Normal file
76
SYSTEM/thb6128/thb6128.c
Normal file
@ -0,0 +1,76 @@
|
||||
#include "thb6128.h"
|
||||
#include "usart.h"
|
||||
#include "stdlib.h"
|
||||
#include "stdio.h"
|
||||
#include "string.h"
|
||||
#include "dac.h"
|
||||
#include "led.h"
|
||||
#include "motorstat.h"
|
||||
/* EN-> PA11 M1 PB13
|
||||
CW/CCW-> PA12 M2 PB14
|
||||
CLK/cp-> PA8 M3 PB15
|
||||
VREF-> PA4
|
||||
FDT-> PA5
|
||||
*/
|
||||
|
||||
extern int s1,s2;
|
||||
void STEP_MOTOR_Init(void){ //接口初始化
|
||||
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE); //使能PB,PE端口时钟
|
||||
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_8|GPIO_Pin_4; // 端口配置
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
|
||||
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化
|
||||
|
||||
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //LED0-->PC13 端口配置
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
|
||||
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化
|
||||
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 端口配置
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
|
||||
GPIO_Init(GPIOC, &GPIO_InitStructure); //根据设定参数初始化
|
||||
|
||||
}
|
||||
|
||||
|
||||
void STEP_MOTOR_FORWARD(void)
|
||||
{
|
||||
GPIO_ResetBits(GPIOA,GPIO_Pin_12); //将PA12拉低,正转
|
||||
MotorStat.moveflag=1;
|
||||
MotorStat.direction=0;
|
||||
MotorStat.MoveMode=0;
|
||||
s1=1;
|
||||
}
|
||||
void STEP_MOTOR_BACKWARD(void)
|
||||
{
|
||||
GPIO_SetBits(GPIOA,GPIO_Pin_12); //将PA12拉高,反转
|
||||
MotorStat.moveflag=1;
|
||||
MotorStat.direction=1;
|
||||
MotorStat.MoveMode=0;
|
||||
s2=1;
|
||||
}
|
||||
|
||||
void STEP_MOTOR_EN (void) //使能
|
||||
{
|
||||
GPIO_SetBits(GPIOA,GPIO_Pin_11);
|
||||
Dac1_Set_Vol(1000);//保持电流
|
||||
}
|
||||
|
||||
void STEP_MOTOR_OPEN (void)//开启电机
|
||||
{
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
|
||||
}
|
||||
void STEP_MOTOR_OFF (void) //脱机
|
||||
{
|
||||
MotorStat.moveflag=0;
|
||||
GPIO_ResetBits(GPIOA,GPIO_Pin_11);
|
||||
printf("ALREDAY_OFFLINE\r\n");
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, DISABLE);
|
||||
}
|
||||
|
||||
26
SYSTEM/thb6128/thb6128.h
Normal file
26
SYSTEM/thb6128/thb6128.h
Normal file
@ -0,0 +1,26 @@
|
||||
#ifndef __STEP_MOTOR_H
|
||||
#define __STEP_MOTOR_H
|
||||
#include "sys.h"
|
||||
#include "delay.h"
|
||||
|
||||
extern u8 STEP; //定义单步计数 全局变量
|
||||
|
||||
|
||||
#define STEP_MOTOR_PORT GPIOG //定义IO接口所在组
|
||||
#define STEP_MOTOR_A GPIO_Pin_2 //定义IO接口
|
||||
#define STEP_MOTOR_B GPIO_Pin_3 //定义IO接口
|
||||
#define STEP_MOTOR_C GPIO_Pin_4 //定义IO接口
|
||||
#define STEP_MOTOR_D GPIO_Pin_5 //定义IO接口
|
||||
#define STEP_MOTOR_CLK RCC_APB2Periph_GPIOG
|
||||
|
||||
|
||||
|
||||
void STEP_MOTOR_Init(void);//初始化
|
||||
void STEP_MOTOR_OFF (void);//断电状态
|
||||
void STEP_MOTOR_FORWARD(void);
|
||||
void STEP_MOTOR_BACKWARD(void);
|
||||
void STEP_MOTOR_OPEN (void);
|
||||
void STEP_MOTOR_EN (void);
|
||||
void switch_zheng (void);
|
||||
void switch_fan (void);
|
||||
#endif
|
||||
150
SYSTEM/usart/usart.c
Normal file
150
SYSTEM/usart/usart.c
Normal file
@ -0,0 +1,150 @@
|
||||
#include "sys.h"
|
||||
#include "usart.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//如果使用ucos,则包括下面的头文件即可.
|
||||
#if SYSTEM_SUPPORT_OS
|
||||
#include "includes.h" //ucos 使用
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
#pragma import(__use_no_semihosting)
|
||||
//标准库需要的支持函数
|
||||
struct __FILE
|
||||
{
|
||||
int handle;
|
||||
|
||||
};
|
||||
|
||||
FILE __stdout;
|
||||
//定义_sys_exit()以避免使用半主机模式
|
||||
void _sys_exit(int x)
|
||||
{
|
||||
x = x;
|
||||
}
|
||||
//重定义fputc函数
|
||||
int fputc(int ch, FILE *f)
|
||||
{
|
||||
while((USART1->SR&0X40)==0);//循环发送,直到发送完毕
|
||||
USART1->DR = (u8) ch;
|
||||
return ch;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*使用microLib的方法*/
|
||||
/*
|
||||
int fputc(int ch, FILE *f)
|
||||
{
|
||||
USART_SendData(USART1, (uint8_t) ch);
|
||||
|
||||
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}
|
||||
|
||||
return ch;
|
||||
}
|
||||
int GetKey (void) {
|
||||
|
||||
while (!(USART1->SR & USART_FLAG_RXNE));
|
||||
|
||||
return ((int)(USART1->DR & 0x1FF));
|
||||
}
|
||||
*/
|
||||
|
||||
#if EN_USART1_RX //如果使能了接收
|
||||
//串口1中断服务程序
|
||||
//注意,读取USARTx->SR能避免莫名其妙的错误
|
||||
char USART_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
|
||||
//接收状态
|
||||
//bit15, 接收完成标志
|
||||
//bit14, 接收到0x0d
|
||||
//bit13~0, 接收到的有效字节数目
|
||||
u16 USART_RX_STA=0; //接收状态标记
|
||||
|
||||
void uart_init(u32 bound){
|
||||
//GPIO端口设置
|
||||
GPIO_InitTypeDef GPIO_InitStructure;
|
||||
USART_InitTypeDef USART_InitStructure;
|
||||
NVIC_InitTypeDef NVIC_InitStructure;
|
||||
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟
|
||||
|
||||
//USART1_TX GPIOA.9
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
|
||||
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
|
||||
|
||||
//USART1_RX GPIOA.10初始化
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
|
||||
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10
|
||||
|
||||
//Usart1 NVIC 配置
|
||||
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
|
||||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
|
||||
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
|
||||
|
||||
//USART 初始化设置
|
||||
|
||||
USART_InitStructure.USART_BaudRate = bound;//串口波特率
|
||||
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
|
||||
USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
|
||||
USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
|
||||
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
|
||||
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
|
||||
|
||||
USART_Init(USART1, &USART_InitStructure); //初始化串口1
|
||||
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
|
||||
USART_Cmd(USART1, ENABLE); //使能串口1
|
||||
|
||||
}
|
||||
|
||||
void USART1_IRQHandler(void) //串口1中断服务程序
|
||||
{
|
||||
u8 Res;
|
||||
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
|
||||
OSIntEnter();
|
||||
#endif
|
||||
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) 判断读寄存器是否非空(RXNE)
|
||||
{
|
||||
|
||||
USART_ClearITPendingBit(USART1,USART_IT_RXNE); //收的地方可能会遇到相同问题,同样需要清标志
|
||||
|
||||
|
||||
Res =USART_ReceiveData(USART1); //读取接收到的数据
|
||||
|
||||
if((USART_RX_STA&0x8000)==0)//接收未完成
|
||||
{
|
||||
if(USART_RX_STA&0x4000)//接收到了0x0d
|
||||
{
|
||||
if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
|
||||
else USART_RX_STA|=0x8000; //接收完成了
|
||||
}
|
||||
else //还没收到0X0D
|
||||
{
|
||||
if(Res==0x0d)USART_RX_STA|=0x4000;
|
||||
else
|
||||
{
|
||||
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
|
||||
USART_RX_STA++;
|
||||
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//发的地方清标志
|
||||
if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET)
|
||||
{
|
||||
USART_ClearFlag(USART1,USART_FLAG_ORE);
|
||||
USART_ReceiveData(USART1);
|
||||
}
|
||||
|
||||
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
|
||||
OSIntExit();
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
38
SYSTEM/usart/usart.h
Normal file
38
SYSTEM/usart/usart.h
Normal file
@ -0,0 +1,38 @@
|
||||
#ifndef __USART_H
|
||||
#define __USART_H
|
||||
#include "stdio.h"
|
||||
#include "sys.h"
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//???????????????<3F><>????????????????????????<3F><>????
|
||||
//ALIENTEK STM32??????
|
||||
//????1?????
|
||||
//???????@ALIENTEK
|
||||
//???????:www.openedv.com
|
||||
//???????:2012/8/18
|
||||
//?<3F><>??V1.5
|
||||
//??????<3F><>?????????
|
||||
//Copyright(C) ?????????????????????? 2009-2019
|
||||
//All rights reserved
|
||||
//********************************************************************************
|
||||
//V1.3??????
|
||||
//???????????????????????????.
|
||||
//???????printf?????
|
||||
//??????????????????.
|
||||
//??????printf?????????????bug
|
||||
//V1.4??????
|
||||
//1,??????????IO??bug
|
||||
//2,?????USART_RX_STA,??????????????????2??14?<3F><>?
|
||||
//3,??????USART_REC_LEN,??????<3F><>???????????????????(??????2??14?<3F><>?)
|
||||
//4,?????EN_USART1_RX???????
|
||||
//V1.5??????
|
||||
//1,???????UCOSII?????
|
||||
#define USART_REC_LEN 200 //??????????????? 200
|
||||
#define EN_USART1_RX 1 //????1??/?????0??????1????
|
||||
|
||||
extern char USART_RX_BUF[USART_REC_LEN]; //???????,???USART_REC_LEN?????.????????<3F><>?
|
||||
extern u16 USART_RX_STA; //?????????
|
||||
//????????<3F><>??????????????????
|
||||
void uart_init(u32 bound);
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user