update swm320 libraries

This commit is contained in:
yanmowudi 2021-05-06 10:10:29 +08:00
parent ed900427cd
commit 22513fe86c
38 changed files with 4840 additions and 4849 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,262 +1,280 @@
/******************************************************************************************************************************************
* : system_SWM320.c
* : SWM320单片机的时钟设置
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
/******************************************************************************************************************************************
* : system_SWM320.c
* : SWM320单片机的时钟设置
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
*
*
*******************************************************************************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH CODING INFORMATION
* REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A RESULT, SYNWIT SHALL NOT BE HELD LIABLE
* FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH CODING INFORMATION
* REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A RESULT, SYNWIT SHALL NOT BE HELD LIABLE
* FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
* OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN IN CONN-
* -ECTION WITH THEIR PRODUCTS.
*
* COPYRIGHT 2012 Synwit Technology
*******************************************************************************************************************************************/
*******************************************************************************************************************************************/
#include <stdint.h>
#include "SWM320.h"
/******************************************************************************************************************************************
*
*
*****************************************************************************************************************************************/
#define SYS_CLK_20MHz 0 //0 内部高频20MHz RC振荡器
#define SYS_CLK_40MHz 1 //1 内部高频40MHz RC振荡器
#define SYS_CLK_32KHz 2 //2 内部低频32KHz RC振荡器
#define SYS_CLK_XTAL 3 //3 外部晶体振荡器2-30MHz
#define SYS_CLK_PLL 4 //4 片内锁相环输出
#define SYS_CLK_20MHz 0 //0 内部高频20MHz RC振荡器
#define SYS_CLK_40MHz 1 //1 内部高频40MHz RC振荡器
#define SYS_CLK_32KHz 2 //2 内部低频32KHz RC振荡器
#define SYS_CLK_XTAL 3 //3 外部晶体振荡器2-30MHz
#define SYS_CLK_PLL 4 //4 片内锁相环输出
#define SYS_CLK SYS_CLK_PLL
#define SYS_CLK SYS_CLK_PLL
#define SYS_CLK_DIV_1 0
#define SYS_CLK_DIV_2 1
#define SYS_CLK_DIV SYS_CLK_DIV_1
#define SYS_CLK_DIV_1 0
#define SYS_CLK_DIV_2 1
#define __HSI (20000000UL) //高速内部时钟
#define __LSI (32000UL) //低速内部时钟
#define __HSE (20000000UL) //高速外部时钟
#define SYS_CLK_DIV SYS_CLK_DIV_1
/********************************** PLL 设定 **********************************************
* VCO输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV
* PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV
*****************************************************************************************/
#define SYS_PLL_SRC SYS_CLK_20MHz //可取值SYS_CLK_20MHz、SYS_CLK_XTAL
#define PLL_IN_DIV 5
#define __HSI (20000000UL) //高速内部时钟
#define __LSI ( 32000UL) //低速内部时钟
#define __HSE (20000000UL) //高速外部时钟
#define PLL_FB_DIV 60
#define PLL_OUT_DIV8 0
#define PLL_OUT_DIV4 1
#define PLL_OUT_DIV2 2
/********************************** PLL 设定 **********************************************
* VCO输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV
* PLL输出频率 = PLL输入时钟 / INDIV * 4 * FBDIV / OUTDIV = VCO输出频率 / OUTDIV
*****************************************************************************************/
#define SYS_PLL_SRC SYS_CLK_20MHz //可取值SYS_CLK_20MHz、SYS_CLK_XTAL
#define PLL_OUT_DIV PLL_OUT_DIV8
#define PLL_IN_DIV 5
uint32_t SystemCoreClock = __HSI; //System Clock Frequency (Core Clock)
uint32_t CyclesPerUs = (__HSI / 1000000); //Cycles per micro second
#define PLL_FB_DIV 60
/******************************************************************************************************************************************
* :
* : This function is used to update the variable SystemCoreClock and must be called whenever the core clock is changed
* :
* :
* :
#define PLL_OUT_DIV8 0
#define PLL_OUT_DIV4 1
#define PLL_OUT_DIV2 2
#define PLL_OUT_DIV PLL_OUT_DIV8
uint32_t SystemCoreClock = __HSI; //System Clock Frequency (Core Clock)
uint32_t CyclesPerUs = (__HSI / 1000000); //Cycles per micro second
/******************************************************************************************************************************************
* :
* : This function is used to update the variable SystemCoreClock and must be called whenever the core clock is changed
* :
* :
* :
******************************************************************************************************************************************/
void SystemCoreClockUpdate(void)
void SystemCoreClockUpdate(void)
{
if (SYS->CLKSEL & SYS_CLKSEL_SYS_Msk) //SYS_CLK <= HFCK
{
if (SYS->CLKSEL & SYS_CLKSEL_HFCK_Msk) //HFCK <= XTAL
{
SystemCoreClock = __HSE;
}
else //HFCK <= HRC
{
if (SYS->HRCCR & SYS_HRCCR_DBL_Msk) //HRC = 40MHz
{
SystemCoreClock = __HSI * 2;
}
else //HRC = 20MHz
{
SystemCoreClock = __HSI;
}
}
}
else //SYS_CLK <= LFCK
{
if (SYS->CLKSEL & SYS_CLKSEL_LFCK_Msk) //LFCK <= PLL
{
if (SYS->PLLCR & SYS_PLLCR_INSEL_Msk) //PLL_SRC <= HRC
{
SystemCoreClock = __HSI;
}
else //PLL_SRC <= XTAL
{
SystemCoreClock = __HSE;
}
SystemCoreClock = SystemCoreClock / PLL_IN_DIV * PLL_FB_DIV * 4 / (2 << (2 - PLL_OUT_DIV));
}
else //LFCK <= LRC
{
SystemCoreClock = __LSI;
}
}
if (SYS->CLKDIV & SYS_CLKDIV_SYS_Msk)
SystemCoreClock /= 2;
CyclesPerUs = SystemCoreClock / 1000000;
if(SYS->CLKSEL & SYS_CLKSEL_SYS_Msk) //SYS_CLK <= HFCK
{
if(SYS->CLKSEL & SYS_CLKSEL_HFCK_Msk) //HFCK <= XTAL
{
SystemCoreClock = __HSE;
}
else //HFCK <= HRC
{
if(SYS->HRCCR & SYS_HRCCR_DBL_Msk) //HRC = 40MHz
{
SystemCoreClock = __HSI*2;
}
else //HRC = 20MHz
{
SystemCoreClock = __HSI;
}
}
}
else //SYS_CLK <= LFCK
{
if(SYS->CLKSEL & SYS_CLKSEL_LFCK_Msk) //LFCK <= PLL
{
if(SYS->PLLCR & SYS_PLLCR_INSEL_Msk) //PLL_SRC <= HRC
{
SystemCoreClock = __HSI;
}
else //PLL_SRC <= XTAL
{
SystemCoreClock = __HSE;
}
SystemCoreClock = SystemCoreClock / PLL_IN_DIV * PLL_FB_DIV * 4 / (2 << (2 - PLL_OUT_DIV));
}
else //LFCK <= LRC
{
SystemCoreClock = __LSI;
}
}
if(SYS->CLKDIV & SYS_CLKDIV_SYS_Msk) SystemCoreClock /= 2;
CyclesPerUs = SystemCoreClock / 1000000;
}
/******************************************************************************************************************************************
* :
* : The necessary initializaiton of systerm
* :
* :
* :
/******************************************************************************************************************************************
* :
* : The necessary initializaiton of systerm
* :
* :
* :
******************************************************************************************************************************************/
void SystemInit(void)
{
SYS->CLKEN |= (1 << SYS_CLKEN_ANAC_Pos);
switch (SYS_CLK)
{
case SYS_CLK_20MHz: //0 内部高频20MHz RC振荡器
switchCLK_20MHz();
break;
case SYS_CLK_40MHz: //1 内部高频40MHz RC振荡器
switchCLK_40MHz();
break;
case SYS_CLK_32KHz: //2 内部低频32KHz RC振荡器
switchCLK_32KHz();
break;
case SYS_CLK_XTAL: //3 外部晶体振荡器2-30MHz
switchCLK_XTAL();
break;
case SYS_CLK_PLL: //4 片内锁相环输出
switchCLK_PLL();
break;
}
SYS->CLKDIV &= ~SYS_CLKDIV_SYS_Msk;
SYS->CLKDIV |= (SYS_CLK_DIV << SYS_CLKDIV_SYS_Pos);
SystemCoreClockUpdate();
{
SYS->CLKEN |= (1 << SYS_CLKEN_ANAC_Pos);
Flash_Param_at_xMHz(120);
switch(SYS_CLK)
{
case SYS_CLK_20MHz: //0 内部高频20MHz RC振荡器
switchCLK_20MHz();
break;
case SYS_CLK_40MHz: //1 内部高频40MHz RC振荡器
switchCLK_40MHz();
break;
case SYS_CLK_32KHz: //2 内部低频32KHz RC振荡器
switchCLK_32KHz();
break;
case SYS_CLK_XTAL: //3 外部晶体振荡器2-30MHz
switchCLK_XTAL();
break;
case SYS_CLK_PLL: //4 片内锁相环输出
switchCLK_PLL();
break;
}
SYS->CLKDIV &= ~SYS_CLKDIV_SYS_Msk;
SYS->CLKDIV |= (SYS_CLK_DIV << SYS_CLKDIV_SYS_Pos);
SystemCoreClockUpdate();
if(SystemCoreClock > 80000000)
{
Flash_Param_at_xMHz(120);
}
else if(SystemCoreClock > 40000000)
{
Flash_Param_at_xMHz(80);
}
else if(SystemCoreClock > 30000000)
{
Flash_Param_at_xMHz(40);
}
else
{
Flash_Param_at_xMHz(30);
}
}
void switchCLK_20MHz(void)
{
uint32_t i;
SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
(0 << SYS_HRCCR_DBL_Pos); //HRC = 20MHz
for (i = 0; i < 1000; i++)
__NOP();
SYS->CLKSEL &= ~SYS_CLKSEL_HFCK_Msk; //HFCK <= HRC
SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK <= HFCK
uint32_t i;
SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
(0 << SYS_HRCCR_DBL_Pos); //HRC = 20MHz
for(i = 0; i < 1000; i++) __NOP();
SYS->CLKSEL &= ~SYS_CLKSEL_HFCK_Msk; //HFCK <= HRC
SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK <= HFCK
}
void switchCLK_40MHz(void)
{
uint32_t i;
SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
(1 << SYS_HRCCR_DBL_Pos); //HRC = 40MHz
for (i = 0; i < 1000; i++)
__NOP();
SYS->CLKSEL &= ~SYS_CLKSEL_HFCK_Msk; //HFCK <= HRC
SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK <= HFCK
uint32_t i;
SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
(1 << SYS_HRCCR_DBL_Pos); //HRC = 40MHz
for(i = 0; i < 1000; i++) __NOP();
SYS->CLKSEL &= ~SYS_CLKSEL_HFCK_Msk; //HFCK <= HRC
SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK <= HFCK
}
void switchCLK_32KHz(void)
{
uint32_t i;
SYS->CLKEN |= (1 << SYS_CLKEN_RTCBKP_Pos);
SYS->LRCCR &= ~(1 << SYS_LRCCR_OFF_Pos);
for (i = 0; i < 100; i++)
__NOP();
SYS->CLKSEL &= ~SYS_CLKSEL_LFCK_Msk; //LFCK <= LRC
SYS->CLKSEL &= ~SYS_CLKSEL_SYS_Msk; //SYS_CLK <= LFCK
uint32_t i;
SYS->CLKEN |= (1 << SYS_CLKEN_RTCBKP_Pos);
SYS->LRCCR &= ~(1 << SYS_LRCCR_OFF_Pos);
for(i = 0; i < 100; i++) __NOP();
SYS->CLKSEL &= ~SYS_CLKSEL_LFCK_Msk; //LFCK <= LRC
SYS->CLKSEL &= ~SYS_CLKSEL_SYS_Msk; //SYS_CLK <= LFCK
}
void switchCLK_XTAL(void)
{
uint32_t i;
SYS->XTALCR = (1 << SYS_XTALCR_EN_Pos);
for (i = 0; i < 1000; i++)
__NOP();
SYS->CLKSEL |= (1 << SYS_CLKSEL_HFCK_Pos); //HFCK <= XTAL
SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK <= HFCK
uint32_t i;
SYS->XTALCR = (1 << SYS_XTALCR_EN_Pos);
for(i = 0; i < 1000; i++) __NOP();
SYS->CLKSEL |= (1 << SYS_CLKSEL_HFCK_Pos); //HFCK <= XTAL
SYS->CLKSEL |= (1 << SYS_CLKSEL_SYS_Pos); //SYS_CLK <= HFCK
}
void switchCLK_PLL(void)
{
uint32_t i;
PLLInit();
SYS->PLLCR |= (1 << SYS_PLLCR_OUTEN_Pos);
for (i = 0; i < 10000; i++)
__NOP();
SYS->CLKSEL |= (1 << SYS_CLKSEL_LFCK_Pos); //LFCK <= PLL
SYS->CLKSEL &= ~SYS_CLKSEL_SYS_Msk; //SYS_CLK <= LFCK
uint32_t i;
PLLInit();
SYS->PLLCR |= (1 << SYS_PLLCR_OUTEN_Pos);
for(i = 0; i < 10000; i++) __NOP();
SYS->CLKSEL |= (1 << SYS_CLKSEL_LFCK_Pos); //LFCK <= PLL
SYS->CLKSEL &= ~SYS_CLKSEL_SYS_Msk; //SYS_CLK <= LFCK
}
void PLLInit(void)
{
uint32_t i;
if (SYS_PLL_SRC == SYS_CLK_20MHz)
{
SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
(0 << SYS_HRCCR_DBL_Pos); //HRC = 20MHz
for (i = 0; i < 1000; i++)
__NOP();
SYS->PLLCR |= (1 << SYS_PLLCR_INSEL_Pos); //PLL_SRC <= HRC
}
else if (SYS_PLL_SRC == SYS_CLK_XTAL)
{
SYS->XTALCR = (1 << SYS_XTALCR_EN_Pos);
for (i = 0; i < 20000; i++)
;
SYS->PLLCR &= ~(1 << SYS_PLLCR_INSEL_Pos); //PLL_SRC <= XTAL
}
SYS->PLLDIV &= ~(SYS_PLLDIV_INDIV_Msk |
SYS_PLLDIV_FBDIV_Msk |
SYS_PLLDIV_OUTDIV_Msk);
SYS->PLLDIV |= (PLL_IN_DIV << SYS_PLLDIV_INDIV_Pos) |
(PLL_FB_DIV << SYS_PLLDIV_FBDIV_Pos) |
(PLL_OUT_DIV << SYS_PLLDIV_OUTDIV_Pos);
SYS->PLLCR &= ~(1 << SYS_PLLCR_OFF_Pos);
while (SYS->PLLLOCK == 0)
; //等待PLL锁定
uint32_t i;
if(SYS_PLL_SRC == SYS_CLK_20MHz)
{
SYS->HRCCR = (0 << SYS_HRCCR_OFF_Pos) |
(0 << SYS_HRCCR_DBL_Pos); //HRC = 20MHz
for(i = 0; i < 1000; i++) __NOP();
SYS->PLLCR |= (1 << SYS_PLLCR_INSEL_Pos); //PLL_SRC <= HRC
}
else if(SYS_PLL_SRC == SYS_CLK_XTAL)
{
SYS->XTALCR = (1 << SYS_XTALCR_EN_Pos);
for(i = 0; i < 20000; i++);
SYS->PLLCR &= ~(1 << SYS_PLLCR_INSEL_Pos); //PLL_SRC <= XTAL
}
SYS->PLLDIV &= ~(SYS_PLLDIV_INDIV_Msk |
SYS_PLLDIV_FBDIV_Msk |
SYS_PLLDIV_OUTDIV_Msk);
SYS->PLLDIV |= (PLL_IN_DIV << SYS_PLLDIV_INDIV_Pos) |
(PLL_FB_DIV << SYS_PLLDIV_FBDIV_Pos) |
(PLL_OUT_DIV<< SYS_PLLDIV_OUTDIV_Pos);
SYS->PLLCR &= ~(1 << SYS_PLLCR_OFF_Pos);
while(SYS->PLLLOCK == 0); //等待PLL锁定
}

View File

@ -2,24 +2,28 @@
#define __SYSTEM_SWM320_H__
#ifdef __cplusplus
extern "C"
{
extern "C" {
#endif
extern uint32_t SystemCoreClock; // System Clock Frequency (Core Clock)
extern uint32_t CyclesPerUs; // Cycles per micro second
extern void SystemInit(void);
extern uint32_t SystemCoreClock; // System Clock Frequency (Core Clock)
extern uint32_t CyclesPerUs; // Cycles per micro second
extern void SystemCoreClockUpdate(void);
extern void switchCLK_20MHz(void);
extern void switchCLK_40MHz(void);
extern void switchCLK_32KHz(void);
extern void switchCLK_XTAL(void);
extern void switchCLK_PLL(void);
extern void SystemInit(void);
extern void SystemCoreClockUpdate (void);
extern void switchCLK_20MHz(void);
extern void switchCLK_40MHz(void);
extern void switchCLK_32KHz(void);
extern void switchCLK_XTAL(void);
extern void switchCLK_PLL(void);
extern void PLLInit(void);
extern void PLLInit(void);
#ifdef __cplusplus
}

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_adc.c
* : SWM320单片机的ADC数模转换器功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
* : SWM320_adc.c
* : SWM320单片机的ADC数模转换器功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
*******************************************************************************************************************************************
* @attention
*
@ -21,12 +21,12 @@
/******************************************************************************************************************************************
* : ADC_Init()
* : ADC模数转换器初始化
* : ADC_TypeDef * ADCx ADCADC0ADC1
* ADC_InitStructure * initStruct ADC各相关定值的结构体
* :
* :
* : ADC_Init()
* : ADC模数转换器初始化
* : ADC_TypeDef * ADCx ADCADC0ADC1
* ADC_InitStructure * initStruct ADC各相关定值的结构体
* :
* :
******************************************************************************************************************************************/
void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct)
{
@ -41,7 +41,7 @@ void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct)
break;
}
ADC_Close(ADCx); //一些关键寄存器只能在ADC关闭时设置
ADC_Close(ADCx); //一些关键寄存器只能在ADC关闭时设置
if(initStruct->clk_src == ADC_CLKSRC_HRC)
{
@ -80,7 +80,7 @@ void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct)
(initStruct->trig_src << ADC_CTRL_TRIG_Pos) |
(initStruct->Continue << ADC_CTRL_CONT_Pos);
ADCx->IF = 0xFFFFFFFF; //清除中断标志
ADCx->IF = 0xFFFFFFFF; //清除中断标志
ADCx->IE &= ~(ADC_IE_CH0EOC_Msk | ADC_IE_CH1EOC_Msk | ADC_IE_CH2EOC_Msk | ADC_IE_CH3EOC_Msk |
ADC_IE_CH4EOC_Msk | ADC_IE_CH5EOC_Msk | ADC_IE_CH6EOC_Msk | ADC_IE_CH7EOC_Msk);
@ -153,11 +153,11 @@ void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct)
}
/******************************************************************************************************************************************
* : ADC_Open()
* : ADC开启ADC转换
* : ADC_TypeDef * ADCx ADCADC
* :
* :
* : ADC_Open()
* : ADC开启ADC转换
* : ADC_TypeDef * ADCx ADCADC
* :
* :
******************************************************************************************************************************************/
void ADC_Open(ADC_TypeDef * ADCx)
{
@ -165,11 +165,11 @@ void ADC_Open(ADC_TypeDef * ADCx)
}
/******************************************************************************************************************************************
* : ADC_Close()
* : ADC关闭ADC转换
* : ADC_TypeDef * ADCx ADCADC
* :
* :
* : ADC_Close()
* : ADC关闭ADC转换
* : ADC_TypeDef * ADCx ADCADC
* :
* :
******************************************************************************************************************************************/
void ADC_Close(ADC_TypeDef * ADCx)
{
@ -177,11 +177,11 @@ void ADC_Close(ADC_TypeDef * ADCx)
}
/******************************************************************************************************************************************
* : ADC_Start()
* : ADC转换
* : ADC_TypeDef * ADCx ADCADC
* :
* :
* : ADC_Start()
* : ADC转换
* : ADC_TypeDef * ADCx ADCADC
* :
* :
******************************************************************************************************************************************/
void ADC_Start(ADC_TypeDef * ADCx)
{
@ -189,11 +189,11 @@ void ADC_Start(ADC_TypeDef * ADCx)
}
/******************************************************************************************************************************************
* : ADC_Stop()
* : ADC转换
* : ADC_TypeDef * ADCx ADCADC
* :
* :
* : ADC_Stop()
* : ADC转换
* : ADC_TypeDef * ADCx ADCADC
* :
* :
******************************************************************************************************************************************/
void ADC_Stop(ADC_TypeDef * ADCx)
{
@ -220,12 +220,12 @@ static uint32_t chn2idx(uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_Read()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* : uint32_t
* :
* : ADC_Read()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* : uint32_t
* :
******************************************************************************************************************************************/
uint32_t ADC_Read(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -234,18 +234,18 @@ uint32_t ADC_Read(ADC_TypeDef * ADCx, uint32_t chn)
dat = ADCx->CH[idx].DATA;
ADCx->CH[idx].STAT = 0x01; //清除EOC标志
ADCx->CH[idx].STAT = 0x01; //清除EOC标志
return dat;
}
/******************************************************************************************************************************************
* : ADC_IsEOC()
* : End Of Conversion
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* : uint32_t 1 0
* :
* : ADC_IsEOC()
* : End Of Conversion
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t ADC_IsEOC(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -255,12 +255,12 @@ uint32_t ADC_IsEOC(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_ChnSelect()
* : ADC通道选通
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chns ADC_CH0ADC_CH1... ... ADC_CH7及其组合
* :
* :
* : ADC_ChnSelect()
* : ADC通道选通
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chns ADC_CH0ADC_CH1... ... ADC_CH7及其组合
* :
* :
******************************************************************************************************************************************/
void ADC_ChnSelect(ADC_TypeDef * ADCx, uint32_t chns)
{
@ -270,12 +270,12 @@ void ADC_ChnSelect(ADC_TypeDef * ADCx, uint32_t chns)
/******************************************************************************************************************************************
* : ADC_IntEOCEn()
* : 使
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
* : ADC_IntEOCEn()
* : 使
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
******************************************************************************************************************************************/
void ADC_IntEOCEn(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -285,12 +285,12 @@ void ADC_IntEOCEn(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntEOCDis()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
* : ADC_IntEOCDis()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
******************************************************************************************************************************************/
void ADC_IntEOCDis(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -300,12 +300,12 @@ void ADC_IntEOCDis(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntEOCClr()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
* : ADC_IntEOCClr()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
******************************************************************************************************************************************/
void ADC_IntEOCClr(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -315,12 +315,12 @@ void ADC_IntEOCClr(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntEOCStat()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* : uint32_t 1 0
* :
* : ADC_IntEOCStat()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t ADC_IntEOCStat(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -330,12 +330,12 @@ uint32_t ADC_IntEOCStat(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntOVFEn()
* : 使
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
* : ADC_IntOVFEn()
* : 使
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
******************************************************************************************************************************************/
void ADC_IntOVFEn(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -345,12 +345,12 @@ void ADC_IntOVFEn(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntOVFDis()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
* : ADC_IntOVFDis()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
******************************************************************************************************************************************/
void ADC_IntOVFDis(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -360,12 +360,12 @@ void ADC_IntOVFDis(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntOVFClr()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
* : ADC_IntOVFClr()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
******************************************************************************************************************************************/
void ADC_IntOVFClr(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -375,12 +375,12 @@ void ADC_IntOVFClr(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntOVFStat()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* : uint32_t 1 0
* :
* : ADC_IntOVFStat()
* :
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t ADC_IntOVFStat(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -390,12 +390,12 @@ uint32_t ADC_IntOVFStat(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntHFULLEn()
* : FIFO半满中断使能
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
* : ADC_IntHFULLEn()
* : FIFO半满中断使能
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
******************************************************************************************************************************************/
void ADC_IntHFULLEn(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -405,12 +405,12 @@ void ADC_IntHFULLEn(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntHFULLDis()
* : FIFO半满中断禁止
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
* : ADC_IntHFULLDis()
* : FIFO半满中断禁止
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
******************************************************************************************************************************************/
void ADC_IntHFULLDis(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -420,12 +420,12 @@ void ADC_IntHFULLDis(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntHFULLClr()
* : FIFO半满中断标志清除
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
* : ADC_IntHFULLClr()
* : FIFO半满中断标志清除
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
******************************************************************************************************************************************/
void ADC_IntHFULLClr(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -435,12 +435,12 @@ void ADC_IntHFULLClr(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntHFULLStat()
* : FIFO半满中断状态
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* : uint32_t 1 0
* :
* : ADC_IntHFULLStat()
* : FIFO半满中断状态
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t ADC_IntHFULLStat(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -450,12 +450,12 @@ uint32_t ADC_IntHFULLStat(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntFULLEn()
* : FIFO满中断使能
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
* : ADC_IntFULLEn()
* : FIFO满中断使能
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
******************************************************************************************************************************************/
void ADC_IntFULLEn(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -465,12 +465,12 @@ void ADC_IntFULLEn(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntFULLDis()
* : FIFO满中断禁止
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
* : ADC_IntFULLDis()
* : FIFO满中断禁止
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
******************************************************************************************************************************************/
void ADC_IntFULLDis(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -480,12 +480,12 @@ void ADC_IntFULLDis(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntFULLClr()
* : FIFO满中断标志清除
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
* : ADC_IntFULLClr()
* : FIFO满中断标志清除
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* :
* :
******************************************************************************************************************************************/
void ADC_IntFULLClr(ADC_TypeDef * ADCx, uint32_t chn)
{
@ -495,12 +495,12 @@ void ADC_IntFULLClr(ADC_TypeDef * ADCx, uint32_t chn)
}
/******************************************************************************************************************************************
* : ADC_IntFULLStat()
* : FIFO满中断状态
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* : uint32_t 1 0
* :
* : ADC_IntFULLStat()
* : FIFO满中断状态
* : ADC_TypeDef * ADCx ADCADC
* uint32_t chn ADC_CH0ADC_CH1... ... ADC_CH7
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t ADC_IntFULLStat(ADC_TypeDef * ADCx, uint32_t chn)
{

View File

@ -2,18 +2,18 @@
#define __SWM320_ADC_H__
typedef struct {
uint8_t clk_src; //ADC转换时钟源ADC_CLKSRC_HRC、ADC_CLKSRC_VCO_DIV16、ADC_CLKSRC_VCO_DIV32、ADC_CLKSRC_VCO_DIV32
uint8_t clk_div; //ADC转换时钟分频取值1--31
uint8_t pga_ref; //PGA基准PGA_REF_INTERNAL、PGA_REF_EXTERNAL
uint8_t channels; //ADC转换通道选中ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合即“按位或”运算
uint8_t samplAvg; //采样取平均触发启动ADC转换后ADC在一个通道上连续采样、转换多次并将它们的平均值作为该通道转换结果
uint8_t trig_src; //ADC触发方式ADC_TRIGSRC_SW、ADC_TRIGSRC_PWM、ADC_TRIGSRC_TIMR2、ADC_TRIGSRC_TIMR3
uint8_t Continue; //在软件触发模式下1 连续转换模式启动后一直采样、转换直到软件清除START位
// 0 单次转换模式转换完成后START位自动清除停止转换
uint8_t EOC_IEn; //EOC中断使能可针对每个通道设置其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合即“按位或”运算
uint8_t OVF_IEn; //OVF中断使能可针对每个通道设置其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合即“按位或”运算
uint8_t HFULL_IEn; //FIFO半满中断使能可针对每个通道设置其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合即“按位或”运算
uint8_t FULL_IEn; //FIFO 满中断使能可针对每个通道设置其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合即“按位或”运算
uint8_t clk_src; //ADC转换时钟源ADC_CLKSRC_HRC、ADC_CLKSRC_VCO_DIV16、ADC_CLKSRC_VCO_DIV32、ADC_CLKSRC_VCO_DIV32
uint8_t clk_div; //ADC转换时钟分频取值1--31
uint8_t pga_ref; //PGA基准PGA_REF_INTERNAL、PGA_REF_EXTERNAL
uint8_t channels; //ADC转换通道选中ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合即“按位或”运算
uint8_t samplAvg; //采样取平均触发启动ADC转换后ADC在一个通道上连续采样、转换多次并将它们的平均值作为该通道转换结果
uint8_t trig_src; //ADC触发方式ADC_TRIGSRC_SW、ADC_TRIGSRC_PWM、ADC_TRIGSRC_TIMR2、ADC_TRIGSRC_TIMR3
uint8_t Continue; //在软件触发模式下1 连续转换模式启动后一直采样、转换直到软件清除START位
// 0 单次转换模式转换完成后START位自动清除停止转换
uint8_t EOC_IEn; //EOC中断使能可针对每个通道设置其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合即“按位或”运算
uint8_t OVF_IEn; //OVF中断使能可针对每个通道设置其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合即“按位或”运算
uint8_t HFULL_IEn; //FIFO半满中断使能可针对每个通道设置其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合即“按位或”运算
uint8_t FULL_IEn; //FIFO 满中断使能可针对每个通道设置其有效值为ADC_CH0、ADC_CH1、... ... 、ADC_CH7及其组合即“按位或”运算
} ADC_InitStructure;
#define ADC_CH0 0x01
@ -31,49 +31,49 @@ typedef struct {
#define ADC_CLKSRC_VCO_DIV64 4
#define ADC_AVG_SAMPLE1 0
#define ADC_AVG_SAMPLE2 1 //一次启动连续采样、转换2次并计算两次结果的平均值作为转换结果
#define ADC_AVG_SAMPLE2 1 //一次启动连续采样、转换2次并计算两次结果的平均值作为转换结果
#define ADC_AVG_SAMPLE4 3
#define ADC_AVG_SAMPLE8 7
#define ADC_AVG_SAMPLE16 15
#define ADC_TRIGSRC_SW 0 //软件触发即ADC->START.GO写1启动转换
#define ADC_TRIGSRC_SW 0 //软件触发即ADC->START.GO写1启动转换
#define ADC_TRIGSRC_PWM 1
#define PGA_REF_INTERNAL 1 //PGA输入共模电平由内部电路产生ADC_REFP和ADC_REFN可悬空
#define PGA_REF_EXTERNAL 0 //PGA输入共模电平由外部引脚提供(ADC_REFP + ADC_REFN) 电平值须与量程相同
#define PGA_REF_INTERNAL 1 //PGA输入共模电平由内部电路产生ADC_REFP和ADC_REFN可悬空
#define PGA_REF_EXTERNAL 0 //PGA输入共模电平由外部引脚提供(ADC_REFP + ADC_REFN) 电平值须与量程相同
void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct); //ADC模数转换器初始化
void ADC_Open(ADC_TypeDef * ADCx); //ADC开启可以软件启动、或硬件触发ADC转换
void ADC_Close(ADC_TypeDef * ADCx); //ADC关闭无法软件启动、或硬件触发ADC转换
void ADC_Start(ADC_TypeDef * ADCx); //启动指定ADC开始模数转换
void ADC_Stop(ADC_TypeDef * ADCx); //关闭指定ADC停止模数转换
void ADC_Init(ADC_TypeDef * ADCx, ADC_InitStructure * initStruct); //ADC模数转换器初始化
void ADC_Open(ADC_TypeDef * ADCx); //ADC开启可以软件启动、或硬件触发ADC转换
void ADC_Close(ADC_TypeDef * ADCx); //ADC关闭无法软件启动、或硬件触发ADC转换
void ADC_Start(ADC_TypeDef * ADCx); //启动指定ADC开始模数转换
void ADC_Stop(ADC_TypeDef * ADCx); //关闭指定ADC停止模数转换
uint32_t ADC_Read(ADC_TypeDef * ADCx, uint32_t chn); //从指定通道读取转换结果
uint32_t ADC_IsEOC(ADC_TypeDef * ADCx, uint32_t chn); //指定通道是否End Of Conversion
uint32_t ADC_Read(ADC_TypeDef * ADCx, uint32_t chn); //从指定通道读取转换结果
uint32_t ADC_IsEOC(ADC_TypeDef * ADCx, uint32_t chn); //指定通道是否End Of Conversion
void ADC_ChnSelect(ADC_TypeDef * ADCx, uint32_t chns);
void ADC_IntEOCEn(ADC_TypeDef * ADCx, uint32_t chn); //转换完成中断使能
void ADC_IntEOCDis(ADC_TypeDef * ADCx, uint32_t chn); //转换完成中断禁止
void ADC_IntEOCClr(ADC_TypeDef * ADCx, uint32_t chn); //转换完成中断标志清除
uint32_t ADC_IntEOCStat(ADC_TypeDef * ADCx, uint32_t chn); //转换完成中断状态
void ADC_IntEOCEn(ADC_TypeDef * ADCx, uint32_t chn); //转换完成中断使能
void ADC_IntEOCDis(ADC_TypeDef * ADCx, uint32_t chn); //转换完成中断禁止
void ADC_IntEOCClr(ADC_TypeDef * ADCx, uint32_t chn); //转换完成中断标志清除
uint32_t ADC_IntEOCStat(ADC_TypeDef * ADCx, uint32_t chn); //转换完成中断状态
void ADC_IntOVFEn(ADC_TypeDef * ADCx, uint32_t chn); //数据溢出中断使能
void ADC_IntOVFDis(ADC_TypeDef * ADCx, uint32_t chn); //数据溢出中断禁止
void ADC_IntOVFClr(ADC_TypeDef * ADCx, uint32_t chn); //数据溢出中断标志清除
uint32_t ADC_IntOVFStat(ADC_TypeDef * ADCx, uint32_t chn); //数据溢出中断状态
void ADC_IntOVFEn(ADC_TypeDef * ADCx, uint32_t chn); //数据溢出中断使能
void ADC_IntOVFDis(ADC_TypeDef * ADCx, uint32_t chn); //数据溢出中断禁止
void ADC_IntOVFClr(ADC_TypeDef * ADCx, uint32_t chn); //数据溢出中断标志清除
uint32_t ADC_IntOVFStat(ADC_TypeDef * ADCx, uint32_t chn); //数据溢出中断状态
void ADC_IntHFULLEn(ADC_TypeDef * ADCx, uint32_t chn); //FIFO半满中断使能
void ADC_IntHFULLDis(ADC_TypeDef * ADCx, uint32_t chn); //FIFO半满中断禁止
void ADC_IntHFULLClr(ADC_TypeDef * ADCx, uint32_t chn); //FIFO半满中断标志清除
uint32_t ADC_IntHFULLStat(ADC_TypeDef * ADCx, uint32_t chn);//FIFO半满中断状态
void ADC_IntHFULLEn(ADC_TypeDef * ADCx, uint32_t chn); //FIFO半满中断使能
void ADC_IntHFULLDis(ADC_TypeDef * ADCx, uint32_t chn); //FIFO半满中断禁止
void ADC_IntHFULLClr(ADC_TypeDef * ADCx, uint32_t chn); //FIFO半满中断标志清除
uint32_t ADC_IntHFULLStat(ADC_TypeDef * ADCx, uint32_t chn);//FIFO半满中断状态
void ADC_IntFULLEn(ADC_TypeDef * ADCx, uint32_t chn); //FIFO满中断使能
void ADC_IntFULLDis(ADC_TypeDef * ADCx, uint32_t chn); //FIFO满中断禁止
void ADC_IntFULLClr(ADC_TypeDef * ADCx, uint32_t chn); //FIFO满中断标志清除
uint32_t ADC_IntFULLStat(ADC_TypeDef * ADCx, uint32_t chn); //FIFO满中断状态
void ADC_IntFULLEn(ADC_TypeDef * ADCx, uint32_t chn); //FIFO满中断使能
void ADC_IntFULLDis(ADC_TypeDef * ADCx, uint32_t chn); //FIFO满中断禁止
void ADC_IntFULLClr(ADC_TypeDef * ADCx, uint32_t chn); //FIFO满中断标志清除
uint32_t ADC_IntFULLStat(ADC_TypeDef * ADCx, uint32_t chn); //FIFO满中断状态
#endif //__SWM320_ADC_H__

View File

@ -411,18 +411,6 @@ void CAN_INTRXNotEmptyDis(CAN_TypeDef * CANx)
CANx->IE &= ~(1 << CAN_IE_RXDA_Pos);
}
/******************************************************************************************************************************************
* : CAN_INTRXNotEmptyStat()
* : RX FIFO非空中断是否触发
* : CAN_TypeDef * CANx CAN接口CAN
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t CAN_INTRXNotEmptyStat(CAN_TypeDef * CANx)
{
return (CANx->IF & CAN_IF_RXDA_Msk) ? 1 : 0;
}
/******************************************************************************************************************************************
* : CAN_INTTXBufEmptyEn()
* : TX Buffer空时触发中断使能
@ -447,18 +435,6 @@ void CAN_INTTXBufEmptyDis(CAN_TypeDef * CANx)
CANx->IE &= ~(1 << CAN_IE_TXBR_Pos);
}
/******************************************************************************************************************************************
* : CAN_INTTXBufEmptyStat()
* : TX Buffer空中断是否触发
* : CAN_TypeDef * CANx CAN接口CAN
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t CAN_INTTXBufEmptyStat(CAN_TypeDef * CANx)
{
return (CANx->IF & CAN_IF_TXBR_Msk) ? 1 : 0;
}
/******************************************************************************************************************************************
* : CAN_INTErrWarningEn()
* : TXERR/RXERR计数值达到Error Warning Limit时触发中断使能
@ -483,18 +459,6 @@ void CAN_INTErrWarningDis(CAN_TypeDef * CANx)
CANx->IE &= ~(1 << CAN_IE_ERRWARN_Pos);
}
/******************************************************************************************************************************************
* : CAN_INTErrWarningStat()
* : TXERR/RXERR计数值达到Error Warning Limit中断是否触发
* : CAN_TypeDef * CANx CAN接口CAN
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t CAN_INTErrWarningStat(CAN_TypeDef * CANx)
{
return (CANx->IF & CAN_IF_ERRWARN_Msk) ? 1 : 0;
}
/******************************************************************************************************************************************
* : CAN_INTRXOverflowEn()
* : RX FIFO 使
@ -519,18 +483,6 @@ void CAN_INTRXOverflowDis(CAN_TypeDef * CANx)
CANx->IE &= ~(1 << CAN_IE_RXOV_Pos);
}
/******************************************************************************************************************************************
* : CAN_INTRXOverflowStat()
* : RX FIFO
* : CAN_TypeDef * CANx CAN接口CAN
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t CAN_INTRXOverflowStat(CAN_TypeDef * CANx)
{
return (CANx->IF & CAN_IF_RXOV_Msk) ? 1 : 0;
}
/******************************************************************************************************************************************
* : CAN_INTRXOverflowClear()
* : RX FIFO
@ -567,18 +519,6 @@ void CAN_INTWakeupDis(CAN_TypeDef * CANx)
CANx->IE &= ~(1 << CAN_IE_WKUP_Pos);
}
/******************************************************************************************************************************************
* : CAN_INTWakeupStat()
* :
* : CAN_TypeDef * CANx CAN接口CAN
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t CAN_INTWakeupStat(CAN_TypeDef * CANx)
{
return (CANx->IF & CAN_IF_WKUP_Msk) ? 1 : 0;
}
/******************************************************************************************************************************************
* : CAN_INTErrPassiveEn()
* : TXERR/RXERR计数值达到127时中断使能
@ -603,18 +543,6 @@ void CAN_INTErrPassiveDis(CAN_TypeDef * CANx)
CANx->IE &= ~(1 << CAN_IE_ERRPASS_Pos);
}
/******************************************************************************************************************************************
* : CAN_INTErrPassiveStat()
* : TXERR/RXERR计数值达到127中断是否触发
* : CAN_TypeDef * CANx CAN接口CAN
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t CAN_INTErrPassiveStat(CAN_TypeDef * CANx)
{
return (CANx->IF & CAN_IF_ERRPASS_Msk) ? 1 : 0;
}
/******************************************************************************************************************************************
* : CAN_INTArbitrLostEn()
* : 使
@ -639,18 +567,6 @@ void CAN_INTArbitrLostDis(CAN_TypeDef * CANx)
CANx->IE &= ~(1 << CAN_IE_ARBLOST_Pos);
}
/******************************************************************************************************************************************
* : CAN_INTArbitrLostStat()
* :
* : CAN_TypeDef * CANx CAN接口CAN
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t CAN_INTArbitrLostStat(CAN_TypeDef * CANx)
{
return (CANx->IF & CAN_IF_ARBLOST_Msk) ? 1 : 0;
}
/******************************************************************************************************************************************
* : CAN_INTBusErrorEn()
* : 线使
@ -676,13 +592,13 @@ void CAN_INTBusErrorDis(CAN_TypeDef * CANx)
}
/******************************************************************************************************************************************
* : CAN_INTBusErrorStat()
* : 线
* : CAN_INTStat()
* :
* : CAN_TypeDef * CANx CAN接口CAN
* : uint32_t 1 0
* :
* : uint32_t
* : CANx->IF读取清零ISR中只能读取一次
******************************************************************************************************************************************/
uint32_t CAN_INTBusErrorStat(CAN_TypeDef * CANx)
uint32_t CAN_INTStat(CAN_TypeDef * CANx)
{
return (CANx->IF & CAN_IF_BUSERR_Msk) ? 1 : 0;
return CANx->IF;
}

View File

@ -5,14 +5,14 @@
#define CAN_FRAME_EXT 1
typedef struct {
uint8_t Mode; //CAN_MODE_NORMAL、CAN_MODE_LISTEN、CAN_MODE_SELFTEST
uint8_t CAN_BS1; //CAN_BS1_1tq、CAN_BS1_2tq、... ... 、CAN_BS1_16tq
uint8_t CAN_BS2; //CAN_BS2_1tq、CAN_BS2_2tq、... ... 、CAN_BS2_8tq
uint8_t CAN_SJW; //CAN_SJW_1tq、CAN_SJW_2tq、CAN_SJW_3tq、CAN_SJW_4tq
uint32_t Baudrate; //波特率即位传输速率取值1--1000000
uint8_t FilterMode; //CAN_FILTER_16b、CAN_FILTER_32b
uint8_t Mode; //CAN_MODE_NORMAL、CAN_MODE_LISTEN、CAN_MODE_SELFTEST
uint8_t CAN_BS1; //CAN_BS1_1tq、CAN_BS1_2tq、... ... 、CAN_BS1_16tq
uint8_t CAN_BS2; //CAN_BS2_1tq、CAN_BS2_2tq、... ... 、CAN_BS2_8tq
uint8_t CAN_SJW; //CAN_SJW_1tq、CAN_SJW_2tq、CAN_SJW_3tq、CAN_SJW_4tq
uint32_t Baudrate; //波特率即位传输速率取值1--1000000
uint8_t FilterMode; //CAN_FILTER_16b、CAN_FILTER_32b
union {
uint32_t FilterMask32b; //FilterCheck & (~FilterMask) == ID & (~FilterMask)的Message通过过滤
uint32_t FilterMask32b; //FilterCheck & (~FilterMask) == ID & (~FilterMask)的Message通过过滤
struct { // 0 must match 1 don't care
uint16_t FilterMask16b1;
uint16_t FilterMask16b2;
@ -25,15 +25,15 @@ typedef struct {
uint16_t FilterCheck16b2;
};
};
uint8_t RXNotEmptyIEn; //接收FIFO非空有数据可读
uint8_t RXOverflowIEn; //接收FIFO溢出有数据丢失
uint8_t ArbitrLostIEn; //控制器丢失仲裁变成接收方
uint8_t ErrPassiveIEn; //接收/发送错误计数值达到127
uint8_t RXNotEmptyIEn; //接收FIFO非空有数据可读
uint8_t RXOverflowIEn; //接收FIFO溢出有数据丢失
uint8_t ArbitrLostIEn; //控制器丢失仲裁变成接收方
uint8_t ErrPassiveIEn; //接收/发送错误计数值达到127
} CAN_InitStructure;
#define CAN_MODE_NORMAL 0 //常规模式
#define CAN_MODE_LISTEN 1 //监听模式
#define CAN_MODE_SELFTEST 2 //自测模式
#define CAN_MODE_NORMAL 0 //常规模式
#define CAN_MODE_LISTEN 1 //监听模式
#define CAN_MODE_SELFTEST 2 //自测模式
#define CAN_BS1_1tq 0
#define CAN_BS1_2tq 1
@ -66,15 +66,15 @@ typedef struct {
#define CAN_SJW_3tq 2
#define CAN_SJW_4tq 3
#define CAN_FILTER_16b 0 //两个16位过滤器
#define CAN_FILTER_32b 1 //一个32位过滤器
#define CAN_FILTER_16b 0 //两个16位过滤器
#define CAN_FILTER_32b 1 //一个32位过滤器
typedef struct {
uint32_t id; //消息ID
uint8_t format; //帧格式CAN_FRAME_STD、CAN_FRAME_EXT
uint8_t remote; //消息是否为远程帧
uint8_t size; //接收到的数据个数
uint8_t data[8]; //接收到的数据
uint32_t id; //消息ID
uint8_t format; //帧格式CAN_FRAME_STD、CAN_FRAME_EXT
uint8_t remote; //消息是否为远程帧
uint8_t size; //接收到的数据个数
uint8_t data[8]; //接收到的数据
} CAN_RXMessage;
@ -102,35 +102,29 @@ void CAN_SetFilter16b(CAN_TypeDef * CANx, uint16_t check1, uint16_t mask1, uint1
void CAN_INTRXNotEmptyEn(CAN_TypeDef * CANx);
void CAN_INTRXNotEmptyDis(CAN_TypeDef * CANx);
uint32_t CAN_INTRXNotEmptyStat(CAN_TypeDef * CANx);
void CAN_INTTXBufEmptyEn(CAN_TypeDef * CANx);
void CAN_INTTXBufEmptyDis(CAN_TypeDef * CANx);
uint32_t CAN_INTTXBufEmptyStat(CAN_TypeDef * CANx);
void CAN_INTErrWarningEn(CAN_TypeDef * CANx);
void CAN_INTErrWarningDis(CAN_TypeDef * CANx);
uint32_t CAN_INTErrWarningStat(CAN_TypeDef * CANx);
void CAN_INTRXOverflowEn(CAN_TypeDef * CANx);
void CAN_INTRXOverflowDis(CAN_TypeDef * CANx);
uint32_t CAN_INTRXOverflowStat(CAN_TypeDef * CANx);
void CAN_INTRXOverflowClear(CAN_TypeDef * CANx);
void CAN_INTWakeupEn(CAN_TypeDef * CANx);
void CAN_INTWakeupDis(CAN_TypeDef * CANx);
uint32_t CAN_INTWakeupStat(CAN_TypeDef * CANx);
void CAN_INTErrPassiveEn(CAN_TypeDef * CANx);
void CAN_INTErrPassiveDis(CAN_TypeDef * CANx);
uint32_t CAN_INTErrPassiveStat(CAN_TypeDef * CANx);
void CAN_INTArbitrLostEn(CAN_TypeDef * CANx);
void CAN_INTArbitrLostDis(CAN_TypeDef * CANx);
uint32_t CAN_INTArbitrLostStat(CAN_TypeDef * CANx);
void CAN_INTBusErrorEn(CAN_TypeDef * CANx);
void CAN_INTBusErrorDis(CAN_TypeDef * CANx);
uint32_t CAN_INTBusErrorStat(CAN_TypeDef * CANx);
uint32_t CAN_INTStat(CAN_TypeDef * CANx);
#endif //__SWM320_CAN_H__

View File

@ -2,22 +2,22 @@
#define __SWM320_CRC_H__
#define CRC32_IN32 0 //CRC32算法输入数据32位
#define CRC32_IN16 2 //CRC32算法输入数据16位
#define CRC32_IN8 4 //CRC32算法输入数据 8位
#define CRC16_IN16 3 //CRC16算法输入数据16位
#define CRC16_IN8 5 //CRC16算法输入数据 8位
#define CRC32_IN32 0 //CRC32算法输入数据32位
#define CRC32_IN16 2 //CRC32算法输入数据16位
#define CRC32_IN8 4 //CRC32算法输入数据 8位
#define CRC16_IN16 3 //CRC16算法输入数据16位
#define CRC16_IN8 5 //CRC16算法输入数据 8位
void CRC_Init(CRC_TypeDef * CRCx, uint32_t mode, uint32_t out_not, uint32_t out_rev, uint32_t ini_val);
/******************************************************************************************************************************************
* : CRC_Write()
* : CRC写入数据
* : uint32_t data
* :
* :
* : CRC_Write()
* : CRC写入数据
* : uint32_t data
* :
* :
******************************************************************************************************************************************/
static __INLINE void CRC_Write(uint32_t data)
{
@ -25,11 +25,11 @@ static __INLINE void CRC_Write(uint32_t data)
}
/******************************************************************************************************************************************
* : CRC_Result()
* : CRC计算结果
* :
* : uint32_t CRC
* :
* : CRC_Result()
* : CRC计算结果
* :
* : uint32_t CRC
* :
******************************************************************************************************************************************/
static __INLINE uint32_t CRC_Result(void)
{

View File

@ -7,14 +7,14 @@
#define DMA_CH2 2
void DMA_CHM_Config(uint32_t chn, uint32_t src_addr, uint32_t src_addr_incr, uint32_t dst_addr, uint32_t dst_addr_incr, uint32_t num_word, uint32_t int_en); //DMA通道配置用于存储器间如Flash和RAM间搬运数据
void DMA_CH_Open(uint32_t chn); //DMA通道打开
void DMA_CH_Close(uint32_t chn); //DMA通道关闭
void DMA_CHM_Config(uint32_t chn, uint32_t src_addr, uint32_t src_addr_incr, uint32_t dst_addr, uint32_t dst_addr_incr, uint32_t num_word, uint32_t int_en); //DMA通道配置用于存储器间如Flash和RAM间搬运数据
void DMA_CH_Open(uint32_t chn); //DMA通道打开
void DMA_CH_Close(uint32_t chn); //DMA通道关闭
void DMA_CH_INTEn(uint32_t chn); //DMA中断使能数据搬运完成后触发中断
void DMA_CH_INTDis(uint32_t chn); //DMA中断禁止数据搬运完成后不触发中断
void DMA_CH_INTClr(uint32_t chn); //DMA中断标志清除
uint32_t DMA_CH_INTStat(uint32_t chn); //DMA中断状态查询1 数据搬运完成 0 数据搬运未完成
void DMA_CH_INTEn(uint32_t chn); //DMA中断使能数据搬运完成后触发中断
void DMA_CH_INTDis(uint32_t chn); //DMA中断禁止数据搬运完成后不触发中断
void DMA_CH_INTClr(uint32_t chn); //DMA中断标志清除
uint32_t DMA_CH_INTStat(uint32_t chn); //DMA中断状态查询1 数据搬运完成 0 数据搬运未完成
#endif //__SWM320_DMA_H__

View File

@ -1,20 +1,20 @@
#ifndef __SWM320_EXTI_H__
#define __SWM320_EXTI_H__
void EXTI_Init(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t mode); //指定引脚外部中断初始化
void EXTI_Open(GPIO_TypeDef * GPIOx, uint32_t n); //指定引脚外部中断打开(即使能)
void EXTI_Close(GPIO_TypeDef * GPIOx, uint32_t n); //指定引脚外部中断关闭(即禁能)
void EXTI_Init(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t mode); //指定引脚外部中断初始化
void EXTI_Open(GPIO_TypeDef * GPIOx, uint32_t n); //指定引脚外部中断打开(即使能)
void EXTI_Close(GPIO_TypeDef * GPIOx, uint32_t n); //指定引脚外部中断关闭(即禁能)
uint32_t EXTI_State(GPIO_TypeDef * GPIOx, uint32_t n); //指定引脚是否触发了中断
uint32_t EXTI_RawState(GPIO_TypeDef * GPIOx, uint32_t n); //指定引脚是否满足过/了中断触发条件,当此中断关闭时可通过调用此函数以查询的方式检测引脚上是否满足过/了中断触发条件
void EXTI_Clear(GPIO_TypeDef * GPIOx, uint32_t n); //指定引脚外部中断清除(即清除中断标志,以免再次进入此中断)
uint32_t EXTI_State(GPIO_TypeDef * GPIOx, uint32_t n); //指定引脚是否触发了中断
uint32_t EXTI_RawState(GPIO_TypeDef * GPIOx, uint32_t n); //指定引脚是否满足过/了中断触发条件,当此中断关闭时可通过调用此函数以查询的方式检测引脚上是否满足过/了中断触发条件
void EXTI_Clear(GPIO_TypeDef * GPIOx, uint32_t n); //指定引脚外部中断清除(即清除中断标志,以免再次进入此中断)
#define EXTI_FALL_EDGE 0x00 //下降沿触发中断
#define EXTI_RISE_EDGE 0x01 //上升沿触发中断
#define EXTI_BOTH_EDGE 0x02 //双边沿触发中断
#define EXTI_LOW_LEVEL 0x10 //低电平触发中断
#define EXTI_HIGH_LEVEL 0x11 //高电平触发中断
#define EXTI_FALL_EDGE 0x00 //下降沿触发中断
#define EXTI_RISE_EDGE 0x01 //上升沿触发中断
#define EXTI_BOTH_EDGE 0x02 //双边沿触发中断
#define EXTI_LOW_LEVEL 0x10 //低电平触发中断
#define EXTI_HIGH_LEVEL 0x11 //高电平触发中断
#endif //__SWM320_EXTI_H__

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_flash.c
* : 使IAP功能将片上Flash模拟成EEPROM来保存数据
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
* : SWM320_flash.c
* : 使IAP功能将片上Flash模拟成EEPROM来保存数据
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
*******************************************************************************************************************************************
* @attention
*
@ -27,11 +27,11 @@ IAP_Flash_Write_t IAP_Flash_Write = (IAP_Flash_Write_t)0x11000801;
/******************************************************************************************************************************************
* : FLASH_Erase()
* : Flash擦除
* : uint32_t addr 4K Byte
* :
* :
* : FLASH_Erase()
* : Flash擦除
* : uint32_t addr 4K Byte
* :
* :
******************************************************************************************************************************************/
void FLASH_Erase(uint32_t addr)
{
@ -45,13 +45,13 @@ void FLASH_Erase(uint32_t addr)
}
/******************************************************************************************************************************************
* : FLASH_Write()
* : Flash写入
* : uint32_t addr
* uint32_t buff[]
* uint32_t count 44
* :
* : 44
* : FLASH_Write()
* : Flash写入
* : uint32_t addr
* uint32_t buff[]
* uint32_t count 44
* :
* : 44
******************************************************************************************************************************************/
void FLASH_Write(uint32_t addr, uint32_t buff[], uint32_t count)
{
@ -65,17 +65,33 @@ void FLASH_Write(uint32_t addr, uint32_t buff[], uint32_t count)
}
/******************************************************************************************************************************************
* : Flash_Param_at_120MHz()
* : Flash参数设置成120MHz主频下运行时所需的参数
* :
* :
* :
* : Flash_Param_at_xMHz()
* : Flash参数设置成xMHz主频下运行时所需的参数
* : uint32_t x
* :
* :
******************************************************************************************************************************************/
void Flash_Param_at_120MHz(void)
void Flash_Param_at_xMHz(uint32_t x)
{
__disable_irq();
switch(x)
{
case 30:
IAP_Flash_Param(0x489, 0xabf41f25);
break;
IAP_Flash_Param(0x48a, 0xabfc7a6e);
case 40:
IAP_Flash_Param(0x489, 0xabf42929);
break;
case 80:
IAP_Flash_Param(0x489, 0xabf8524d);
break;
case 120:
default:
IAP_Flash_Param(0x48a, 0xabfc7a6e);
break;
}
__enable_irq();
}

View File

@ -5,7 +5,7 @@
void FLASH_Erase(uint32_t addr);
void FLASH_Write(uint32_t addr, uint32_t buff[], uint32_t count);
void Flash_Param_at_120MHz(void);
void Flash_Param_at_xMHz(uint32_t x);

View File

@ -31,7 +31,7 @@
* uint32_t pull_up 0 1
* uint32_t pull_down 0 1
* :
* : GPIOAGPIOCGPIOMGPIOP只有上拉GPIOBGPION只有下拉
* : GPIOAGPIOCGPIOMGPIOP只有上拉GPIOBGPION只有下拉PN0PN1PN2三个引脚有上拉没下拉
******************************************************************************************************************************************/
void GPIO_Init(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t dir, uint32_t pull_up, uint32_t pull_down)
{

View File

@ -2,16 +2,16 @@
#define __SWM320_GPIO_H__
void GPIO_Init(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t dir, uint32_t pull_up, uint32_t pull_down); //引脚初始化,包含引脚方向、上拉电阻、下拉电阻
void GPIO_Init(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t dir, uint32_t pull_up, uint32_t pull_down); //引脚初始化,包含引脚方向、上拉电阻、下拉电阻
void GPIO_SetBit(GPIO_TypeDef * GPIOx, uint32_t n); //将参数指定的引脚电平置高
void GPIO_ClrBit(GPIO_TypeDef * GPIOx, uint32_t n); //将参数指定的引脚电平置低
void GPIO_InvBit(GPIO_TypeDef * GPIOx, uint32_t n); //将参数指定的引脚电平反转
uint32_t GPIO_GetBit(GPIO_TypeDef * GPIOx, uint32_t n); //读取参数指定的引脚的电平状态
void GPIO_SetBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w); //将参数指定的从n开始的w位连续引脚的电平置高
void GPIO_ClrBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w); //将参数指定的从n开始的w位连续引脚的电平置低
void GPIO_InvBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w); //将参数指定的从n开始的w位连续引脚的电平反转
uint32_t GPIO_GetBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w); //读取参数指定的从n开始的w位连续引脚的电平状态
void GPIO_SetBit(GPIO_TypeDef * GPIOx, uint32_t n); //将参数指定的引脚电平置高
void GPIO_ClrBit(GPIO_TypeDef * GPIOx, uint32_t n); //将参数指定的引脚电平置低
void GPIO_InvBit(GPIO_TypeDef * GPIOx, uint32_t n); //将参数指定的引脚电平反转
uint32_t GPIO_GetBit(GPIO_TypeDef * GPIOx, uint32_t n); //读取参数指定的引脚的电平状态
void GPIO_SetBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w); //将参数指定的从n开始的w位连续引脚的电平置高
void GPIO_ClrBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w); //将参数指定的从n开始的w位连续引脚的电平置低
void GPIO_InvBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w); //将参数指定的从n开始的w位连续引脚的电平反转
uint32_t GPIO_GetBits(GPIO_TypeDef * GPIOx, uint32_t n, uint32_t w); //读取参数指定的从n开始的w位连续引脚的电平状态
void GPIO_AtomicSetBit(GPIO_TypeDef * GPIOx, uint32_t n);
void GPIO_AtomicClrBit(GPIO_TypeDef * GPIOx, uint32_t n);

View File

@ -2,19 +2,19 @@
#define __SWM320_I2C_H__
typedef struct {
uint8_t Master; //1 主机模式
uint8_t Addr7b; //1 7位地址 0 10位地址
uint8_t Master; //1 主机模式
uint8_t Addr7b; //1 7位地址 0 10位地址
uint32_t MstClk; //主机传输时钟频率
uint8_t MstIEn; //主机模式中断使能
uint32_t MstClk; //主机传输时钟频率
uint8_t MstIEn; //主机模式中断使能
uint16_t SlvAddr; //从机地址
uint8_t SlvRxEndIEn; //从机接收完成中断使能
uint8_t SlvTxEndIEn; //从机发送完成中断使能
uint8_t SlvSTADetIEn; //从机检测到起始中断使能
uint8_t SlvSTODetIEn; //从机检测到终止中断使能
uint8_t SlvRdReqIEn; //从机接收到读请求中断使能
uint8_t SlvWrReqIEn; //从机接收到写请求中断使能
uint16_t SlvAddr; //从机地址
uint8_t SlvRxEndIEn; //从机接收完成中断使能
uint8_t SlvTxEndIEn; //从机发送完成中断使能
uint8_t SlvSTADetIEn; //从机检测到起始中断使能
uint8_t SlvSTODetIEn; //从机检测到终止中断使能
uint8_t SlvRdReqIEn; //从机接收到读请求中断使能
uint8_t SlvWrReqIEn; //从机接收到写请求中断使能
} I2C_InitStructure;

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_lcd.c
* : SWM320单片机的LCD功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
* : SWM320_lcd.c
* : SWM320单片机的LCD功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
*
*
*******************************************************************************************************************************************
@ -24,12 +24,12 @@
#include <string.h>
/******************************************************************************************************************************************
* : LCD_Init()
* : LCD初始化
* : LCD_TypeDef * LCDx LCDLCD
* LCD_InitStructure * initStruct LCD相关设定值的结构体
* :
* :
* : LCD_Init()
* : LCD初始化
* : LCD_TypeDef * LCDx LCDLCD
* LCD_InitStructure * initStruct LCD相关设定值的结构体
* :
* :
******************************************************************************************************************************************/
void LCD_Init(LCD_TypeDef * LCDx, LCD_InitStructure * initStruct)
{
@ -39,30 +39,21 @@ void LCD_Init(LCD_TypeDef * LCDx, LCD_InitStructure * initStruct)
SYS->CLKEN |= (0x01 << SYS_CLKEN_LCD_Pos);
break;
}
if(initStruct->Interface == LCD_INTERFACE_RGB)
{
LCDx->START = (0 << LCD_START_MPUEN_Pos);
LCDx->CR0 = ((initStruct->HnPixel - 1) << LCD_CR0_HPIX_Pos) |
((initStruct->VnPixel - 1) << LCD_CR0_VPIX_Pos) |
(initStruct->ClkAlways << LCD_CR0_DCLK_Pos) |
(initStruct->HsyncWidth << LCD_CR0_HLOW_Pos);
LCDx->CR1 = ((initStruct->Hfp - 1) << LCD_CR1_HFP_Pos) |
((initStruct->Hbp - 1) << LCD_CR1_HBP_Pos) |
((initStruct->Vfp - 1) << LCD_CR1_VFP_Pos) |
((initStruct->Vbp - 1) << LCD_CR1_VBP_Pos) |
(initStruct->ClkDiv << LCD_CR1_DCLKDIV_Pos) |
(initStruct->SamplEdge << LCD_CR1_DCLKINV_Pos);
}
else if(initStruct->Interface == LCD_INTERFACE_I80)
{
//
}
LCDx->CR0 = ((initStruct->HnPixel - 1) << LCD_CR0_HPIX_Pos) |
((initStruct->VnPixel - 1) << LCD_CR0_VPIX_Pos) |
(initStruct->ClkAlways << LCD_CR0_DCLK_Pos) |
(initStruct->HsyncWidth << LCD_CR0_HLOW_Pos);
LCDx->CR1 = ((initStruct->Hfp - 1) << LCD_CR1_HFP_Pos) |
((initStruct->Hbp - 1) << LCD_CR1_HBP_Pos) |
((initStruct->Vfp - 1) << LCD_CR1_VFP_Pos) |
((initStruct->Vbp - 1) << LCD_CR1_VBP_Pos) |
(initStruct->ClkDiv << LCD_CR1_DCLKDIV_Pos) |
(initStruct->SamplEdge << LCD_CR1_DCLKINV_Pos);
LCDx->IE = 1;
LCDx->IF = 1; //清除标志
LCDx->IF = 1; //清除标志
if(initStruct->IntEOTEn) LCD_INTEn(LCDx);
else LCD_INTDis(LCDx);
@ -82,11 +73,11 @@ void LCD_Init(LCD_TypeDef * LCDx, LCD_InitStructure * initStruct)
}
/******************************************************************************************************************************************
* : LCD_Start()
* :
* : LCD_TypeDef * LCDx LCDLCD
* :
* :
* : LCD_Start()
* :
* : LCD_TypeDef * LCDx LCDLCD
* :
* :
******************************************************************************************************************************************/
void LCD_Start(LCD_TypeDef * LCDx)
{
@ -94,11 +85,11 @@ void LCD_Start(LCD_TypeDef * LCDx)
}
/******************************************************************************************************************************************
* : LCD_IsBusy()
* :
* : LCD_TypeDef * LCDx LCDLCD
* : uint32_t 1 0
* :
* : LCD_IsBusy()
* :
* : LCD_TypeDef * LCDx LCDLCD
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t LCD_IsBusy(LCD_TypeDef * LCDx)
{
@ -106,11 +97,11 @@ uint32_t LCD_IsBusy(LCD_TypeDef * LCDx)
}
/******************************************************************************************************************************************
* : LCD_INTEn()
* : LCD中断使能
* : LCD_TypeDef * LCDx LCDLCD
* :
* :
* : LCD_INTEn()
* : LCD中断使能
* : LCD_TypeDef * LCDx LCDLCD
* :
* :
******************************************************************************************************************************************/
void LCD_INTEn(LCD_TypeDef * LCDx)
{
@ -118,11 +109,11 @@ void LCD_INTEn(LCD_TypeDef * LCDx)
}
/******************************************************************************************************************************************
* : LCD_INTDis()
* : LCD中断禁止
* : LCD_TypeDef * LCDx LCDLCD
* :
* :
* : LCD_INTDis()
* : LCD中断禁止
* : LCD_TypeDef * LCDx LCDLCD
* :
* :
******************************************************************************************************************************************/
void LCD_INTDis(LCD_TypeDef * LCDx)
{
@ -130,11 +121,11 @@ void LCD_INTDis(LCD_TypeDef * LCDx)
}
/******************************************************************************************************************************************
* : LCD_INTClr()
* : LCD中断标志清除
* : LCD_TypeDef * LCDx LCDLCD
* :
* :
* : LCD_INTClr()
* : LCD中断标志清除
* : LCD_TypeDef * LCDx LCDLCD
* :
* :
******************************************************************************************************************************************/
void LCD_INTClr(LCD_TypeDef * LCDx)
{
@ -142,11 +133,11 @@ void LCD_INTClr(LCD_TypeDef * LCDx)
}
/******************************************************************************************************************************************
* : LCD_INTStat()
* : LCD中断状态查询
* : LCD_TypeDef * LCDx LCDLCD
* : uint32_t 1 0
* :
* : LCD_INTStat()
* : LCD中断状态查询
* : LCD_TypeDef * LCDx LCDLCD
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t LCD_INTStat(LCD_TypeDef * LCDx)
{

View File

@ -2,10 +2,7 @@
#define __SWM320_LCD_H__
typedef struct {
uint8_t Interface; //LCD屏接口LCD_INTERFACE_RGB、LCD_INTERFACE_I80、LCD_INTERFACE_M68
/* RGB同步接口参数 */
typedef struct {
uint16_t HnPixel; //水平方向像素个数最大取值1024
uint16_t VnPixel; //垂直方向像素个数,最大取值 768
uint8_t Hfp; //horizonal front porch最大取值32
@ -21,10 +18,6 @@ typedef struct {
} LCD_InitStructure;
#define LCD_INTERFACE_RGB 0
#define LCD_INTERFACE_I80 1
#define LCD_INTERFACE_M68 2
#define LCD_SAMPLEDGE_RISE 0 //屏幕在DOTCLK的上升沿采样数据
#define LCD_SAMPLEDGE_FALL 1 //屏幕在DOTCLK的下降沿采样数据

View File

@ -2,12 +2,12 @@
#define __SWM320_NORFLASH_H__
typedef struct {
uint8_t DataWidth; // 8、16
uint8_t DataWidth; // 8、16
uint8_t WELowPulseTime; // WE# pulse width单位为系统时钟周期最大值为7
uint8_t OEPreValidTime; // Valid data output after OE# low单位为系统时钟周期最大值为15
uint8_t WELowPulseTime; // WE# pulse width单位为系统时钟周期最大值为7
uint8_t OEPreValidTime; // Valid data output after OE# low单位为系统时钟周期最大值为15
uint8_t OperFinishIEn; // 操作(写入、擦除)完成中断使能
uint8_t OperFinishIEn; // 操作(写入、擦除)完成中断使能
uint8_t OperTimeoutIEn;
} NORFL_InitStructure;
@ -21,7 +21,7 @@ uint32_t NORFL_Read(uint32_t addr);
uint16_t NORFL_ReadID(uint32_t id_addr);
/* 当前版本总线读只支持字读
/* 当前版本总线读只支持字读
#define NORFL_Read8(addr) *((volatile uint8_t *)(NORFLM_BASE + addr))
#define NORFL_Read16(addr) *((volatile uint16_t *)(NORFLM_BASE + addr)) */
#define NORFL_Read32(addr) *((volatile uint32_t *)(NORFLM_BASE + addr))

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_port.c
* : SWM320单片机的端口引脚功能选择库函数
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
* : SWM320_port.c
* : SWM320单片机的端口引脚功能选择库函数
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
*
*
*******************************************************************************************************************************************
@ -23,15 +23,15 @@
/******************************************************************************************************************************************
* : PORT_Init()
* : "SWM320_port.h"
* : uint32_t PORTx PORT端口PORTAPORTBPORTCPORTMPORTNPORTP
* uint32_t n PORT引脚PIN0PIN1PIN2... ... PIN22PIN23
* uint32_t func "SWM320_port.h"
* uint32_t digit_in_en 使
* :
* : n为偶数时func取值只能是FUNMUX0开头的FUNMUX0_UART0_RXD
* n为奇数时func取值只能是FUNMUX1开头的FUNMUX1_UART0_TXD
* : PORT_Init()
* : "SWM320_port.h"
* : uint32_t PORTx PORT端口PORTAPORTBPORTCPORTMPORTNPORTP
* uint32_t n PORT引脚PIN0PIN1PIN2... ... PIN22PIN23
* uint32_t func "SWM320_port.h"
* uint32_t digit_in_en 使
* :
* : n为偶数时func取值只能是FUNMUX0开头的FUNMUX0_UART0_RXD
* n为奇数时func取值只能是FUNMUX1开头的FUNMUX1_UART0_TXD
******************************************************************************************************************************************/
void PORT_Init(uint32_t PORTx, uint32_t n, uint32_t func, uint32_t digit_in_en)
{

View File

@ -1,7 +1,7 @@
#ifndef __SWM320_PORT_H__
#define __SWM320_PORT_H__
void PORT_Init(uint32_t PORTx, uint32_t n, uint32_t func, uint32_t digit_in_en); //端口引脚功能选择,其可取值如下:
void PORT_Init(uint32_t PORTx, uint32_t n, uint32_t func, uint32_t digit_in_en); //端口引脚功能选择,其可取值如下:
#define PORTA 0
#define PORTB 1
@ -425,8 +425,8 @@ void PORT_Init(uint32_t PORTx, uint32_t n, uint32_t func, uint32_t digit_in_en);
/* 下面宏定义的取值全部在正确值的基础上“加100”以区分上面宏定义的值从而方便库函数的编写*/
/* 下面这些值是偶数编号引脚的功能取值如PIN0、PIN2、... */
/* 下面宏定义的取值全部在正确值的基础上“加100”以区分上面宏定义的值从而方便库函数的编写*/
/* 下面这些值是偶数编号引脚的功能取值如PIN0、PIN2、... */
#define FUNMUX0_UART0_RXD 100
#define FUNMUX0_UART1_RXD 101
#define FUNMUX0_UART2_RXD 102
@ -452,7 +452,7 @@ void PORT_Init(uint32_t PORTx, uint32_t n, uint32_t func, uint32_t digit_in_en);
#define FUNMUX0_UART2_CTS 123
#define FUNMUX0_UART3_CTS 124
/* 下面这些值是奇数编号引脚的功能取值如PIN1、PIN3、... */
/* 下面这些值是奇数编号引脚的功能取值如PIN1、PIN3、... */
#define FUNMUX1_UART0_TXD 100
#define FUNMUX1_UART1_TXD 101
#define FUNMUX1_UART2_TXD 102

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_pwm.c
* : SWM320单片机的PWM功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
* : SWM320_pwm.c
* : SWM320单片机的PWM功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
*
*
*******************************************************************************************************************************************
@ -23,12 +23,12 @@
/******************************************************************************************************************************************
* : PWM_Init()
* : PWM初始化
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* PWM_InitStructure * initStruct PWM相关设定值的结构体
* :
* :
* : PWM_Init()
* : PWM初始化
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* PWM_InitStructure * initStruct PWM相关设定值的结构体
* :
* :
******************************************************************************************************************************************/
void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct)
{
@ -39,7 +39,7 @@ void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct)
SYS->CLKDIV &= ~SYS_CLKDIV_PWM_Msk;
SYS->CLKDIV |= (initStruct->clk_div << SYS_CLKDIV_PWM_Pos);
PWM_Stop(PWMx, 1, 1); //一些关键寄存器只能在PWM停止时设置
PWM_Stop(PWMx, 1, 1); //一些关键寄存器只能在PWM停止时设置
PWMx->MODE = initStruct->mode;
@ -84,7 +84,7 @@ void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct)
break;
}
PWMG->IRS = ((0x01 << bit_offset) | (0x01 << (bit_offset+1)) | (0x01 << (bit_offset+12)) | (0x01 << (bit_offset+13))); //清除中断标志
PWMG->IRS = ((0x01 << bit_offset) | (0x01 << (bit_offset+1)) | (0x01 << (bit_offset+12)) | (0x01 << (bit_offset+13))); //清除中断标志
PWMG->IE &= ~((0x01 << bit_offset) | (0x01 << (bit_offset+1)) | (0x01 << (bit_offset+12)) | (0x01 << (bit_offset+13)));
PWMG->IE |= (initStruct->NCycleAIEn << bit_offset) | (initStruct->NCycleBIEn << (bit_offset+1)) |
(initStruct->HEndAIEn << (bit_offset+12)) | (initStruct->HEndBIEn << (bit_offset+13));
@ -100,13 +100,13 @@ void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct)
}
/******************************************************************************************************************************************
* : PWM_Start()
* : PWMPWM输出
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chA 0 A不启动 1 A启动
* uint32_t chB 0 B不启动 1 B启动
* :
* :
* : PWM_Start()
* : PWMPWM输出
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chA 0 A不启动 1 A启动
* uint32_t chB 0 B不启动 1 B启动
* :
* :
******************************************************************************************************************************************/
void PWM_Start(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB)
{
@ -139,13 +139,13 @@ void PWM_Start(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB)
}
/******************************************************************************************************************************************
* : PWM_Stop()
* : PWMPWM输出
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chA 0 A不关闭 1 A关闭
* uint32_t chB 0 B不关闭 1 B关闭
* :
* :
* : PWM_Stop()
* : PWMPWM输出
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chA 0 A不关闭 1 A关闭
* uint32_t chB 0 B不关闭 1 B关闭
* :
* :
******************************************************************************************************************************************/
void PWM_Stop(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB)
{
@ -178,13 +178,13 @@ void PWM_Stop(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB)
}
/******************************************************************************************************************************************
* : PWM_SetCycle()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* uint16_t cycle
* :
* :
* : PWM_SetCycle()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* uint16_t cycle
* :
* :
******************************************************************************************************************************************/
void PWM_SetCycle(PWM_TypeDef * PWMx, uint32_t chn, uint16_t cycle)
{
@ -195,12 +195,12 @@ void PWM_SetCycle(PWM_TypeDef * PWMx, uint32_t chn, uint16_t cycle)
}
/******************************************************************************************************************************************
* : PWM_GetCycle()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* : uint16_t
* :
* : PWM_GetCycle()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* : uint16_t
* :
******************************************************************************************************************************************/
uint16_t PWM_GetCycle(PWM_TypeDef * PWMx, uint32_t chn)
{
@ -215,13 +215,13 @@ uint16_t PWM_GetCycle(PWM_TypeDef * PWMx, uint32_t chn)
}
/******************************************************************************************************************************************
* : PWM_SetHDuty()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* uint16_t hduty
* :
* :
* : PWM_SetHDuty()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* uint16_t hduty
* :
* :
******************************************************************************************************************************************/
void PWM_SetHDuty(PWM_TypeDef * PWMx, uint32_t chn, uint16_t hduty)
{
@ -232,12 +232,12 @@ void PWM_SetHDuty(PWM_TypeDef * PWMx, uint32_t chn, uint16_t hduty)
}
/******************************************************************************************************************************************
* : PWM_GetHDuty()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* : uint16_t
* :
* : PWM_GetHDuty()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* : uint16_t
* :
******************************************************************************************************************************************/
uint16_t PWM_GetHDuty(PWM_TypeDef * PWMx, uint32_t chn)
{
@ -252,13 +252,13 @@ uint16_t PWM_GetHDuty(PWM_TypeDef * PWMx, uint32_t chn)
}
/******************************************************************************************************************************************
* : PWM_SetDeadzone()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* uint8_t deadzone
* :
* :
* : PWM_SetDeadzone()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* uint8_t deadzone
* :
* :
******************************************************************************************************************************************/
void PWM_SetDeadzone(PWM_TypeDef * PWMx, uint32_t chn, uint8_t deadzone)
{
@ -269,12 +269,12 @@ void PWM_SetDeadzone(PWM_TypeDef * PWMx, uint32_t chn, uint8_t deadzone)
}
/******************************************************************************************************************************************
* : PWM_GetDeadzone()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* : uint8_t
* :
* : PWM_GetDeadzone()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* : uint8_t
* :
******************************************************************************************************************************************/
uint8_t PWM_GetDeadzone(PWM_TypeDef * PWMx, uint32_t chn)
{
@ -290,12 +290,12 @@ uint8_t PWM_GetDeadzone(PWM_TypeDef * PWMx, uint32_t chn)
/******************************************************************************************************************************************
* : PWM_IntNCycleEn()
* : 使
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* :
* :
* : PWM_IntNCycleEn()
* : 使
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* :
* :
******************************************************************************************************************************************/
void PWM_IntNCycleEn(PWM_TypeDef * PWMx, uint32_t chn)
{
@ -334,12 +334,12 @@ void PWM_IntNCycleEn(PWM_TypeDef * PWMx, uint32_t chn)
}
/******************************************************************************************************************************************
* : PWM_IntNCycleDis()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* :
* :
* : PWM_IntNCycleDis()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* :
* :
******************************************************************************************************************************************/
void PWM_IntNCycleDis(PWM_TypeDef * PWMx, uint32_t chn)
{
@ -378,12 +378,12 @@ void PWM_IntNCycleDis(PWM_TypeDef * PWMx, uint32_t chn)
}
/******************************************************************************************************************************************
* : PWM_IntNCycleClr()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* :
* :
* : PWM_IntNCycleClr()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* :
* :
******************************************************************************************************************************************/
void PWM_IntNCycleClr(PWM_TypeDef * PWMx, uint32_t chn)
{
@ -422,12 +422,12 @@ void PWM_IntNCycleClr(PWM_TypeDef * PWMx, uint32_t chn)
}
/******************************************************************************************************************************************
* : PWM_IntNCycleStat()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* : uint32_t 1 0
* :
* : PWM_IntNCycleStat()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t PWM_IntNCycleStat(PWM_TypeDef * PWMx, uint32_t chn)
{
@ -471,12 +471,12 @@ uint32_t PWM_IntNCycleStat(PWM_TypeDef * PWMx, uint32_t chn)
/******************************************************************************************************************************************
* : PWM_IntHEndEn()
* : 使
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* :
* :
* : PWM_IntHEndEn()
* : 使
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* :
* :
******************************************************************************************************************************************/
void PWM_IntHEndEn(PWM_TypeDef * PWMx, uint32_t chn)
{
@ -515,12 +515,12 @@ void PWM_IntHEndEn(PWM_TypeDef * PWMx, uint32_t chn)
}
/******************************************************************************************************************************************
* : PWM_IntHEndDis()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* :
* :
* : PWM_IntHEndDis()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* :
* :
******************************************************************************************************************************************/
void PWM_IntHEndDis(PWM_TypeDef * PWMx, uint32_t chn)
{
@ -559,12 +559,12 @@ void PWM_IntHEndDis(PWM_TypeDef * PWMx, uint32_t chn)
}
/******************************************************************************************************************************************
* : PWM_IntHEndClr()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* :
* :
* : PWM_IntHEndClr()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* :
* :
******************************************************************************************************************************************/
void PWM_IntHEndClr(PWM_TypeDef * PWMx, uint32_t chn)
{
@ -603,12 +603,12 @@ void PWM_IntHEndClr(PWM_TypeDef * PWMx, uint32_t chn)
}
/******************************************************************************************************************************************
* : PWM_IntHEndStat()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* : uint32_t 1 0
* :
* : PWM_IntHEndStat()
* :
* : PWM_TypeDef * PWMx PWMPWM0PWM1PWM2PWM3PWM4PWM5
* uint32_t chn PWM_CH_APWM_CH_B
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t PWM_IntHEndStat(PWM_TypeDef * PWMx, uint32_t chn)
{

View File

@ -2,57 +2,57 @@
#define __SWM320_PWM_H__
typedef struct {
uint8_t clk_div; //PWM_CLKDIV_1、PWM_CLKDIV_8
uint8_t clk_div; //PWM_CLKDIV_1、PWM_CLKDIV_8
uint8_t mode; //PWM_MODE_INDEP、PWM_MODE_COMPL、PWM_MODE_INDEP_CALIGN、PWM_MODE_COMPL_CALIGN
uint8_t mode; //PWM_MODE_INDEP、PWM_MODE_COMPL、PWM_MODE_INDEP_CALIGN、PWM_MODE_COMPL_CALIGN
uint16_t cycleA; //A路周期
uint16_t hdutyA; //A路占空比
uint16_t deadzoneA; //A路死区时长取值0--1023
uint8_t initLevelA; //A路初始输出电平0 低电平 1 高电平
uint16_t cycleA; //A路周期
uint16_t hdutyA; //A路占空比
uint16_t deadzoneA; //A路死区时长取值0--1023
uint8_t initLevelA; //A路初始输出电平0 低电平 1 高电平
uint16_t cycleB; //B路周期
uint16_t hdutyB; //B路占空比
uint16_t deadzoneB; //B路死区时长取值0--1023
uint8_t initLevelB; //B路初始输出电平0 低电平 1 高电平
uint16_t cycleB; //B路周期
uint16_t hdutyB; //B路占空比
uint16_t deadzoneB; //B路死区时长取值0--1023
uint8_t initLevelB; //B路初始输出电平0 低电平 1 高电平
uint8_t HEndAIEn; //A路高电平结束中断使能
uint8_t NCycleAIEn; //A路新周期开始中断使能
uint8_t HEndBIEn; //B路高电平结束中断使能
uint8_t NCycleBIEn; //B路新周期开始中断使能
uint8_t HEndAIEn; //A路高电平结束中断使能
uint8_t NCycleAIEn; //A路新周期开始中断使能
uint8_t HEndBIEn; //B路高电平结束中断使能
uint8_t NCycleBIEn; //B路新周期开始中断使能
} PWM_InitStructure;
#define PWM_CLKDIV_1 0
#define PWM_CLKDIV_8 1
#define PWM_MODE_INDEP 0 //A路和B路为两路独立输出
#define PWM_MODE_COMPL 1 //A路和B路为一路互补输出
#define PWM_MODE_INDEP_CALIGN 3 //A路和B路为两路独立输出中心对齐
#define PWM_MODE_COMPL_CALIGN 4 //A路和B路为一路互补输出中心对齐
#define PWM_MODE_INDEP 0 //A路和B路为两路独立输出
#define PWM_MODE_COMPL 1 //A路和B路为一路互补输出
#define PWM_MODE_INDEP_CALIGN 3 //A路和B路为两路独立输出中心对齐
#define PWM_MODE_COMPL_CALIGN 4 //A路和B路为一路互补输出中心对齐
#define PWM_CH_A 0
#define PWM_CH_B 1
void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct); //PWM初始化
void PWM_Start(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB); //启动PWM开始PWM输出
void PWM_Stop(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB); //关闭PWM停止PWM输出
void PWM_Init(PWM_TypeDef * PWMx, PWM_InitStructure * initStruct); //PWM初始化
void PWM_Start(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB); //启动PWM开始PWM输出
void PWM_Stop(PWM_TypeDef * PWMx, uint32_t chA, uint32_t chB); //关闭PWM停止PWM输出
void PWM_SetCycle(PWM_TypeDef * PWMx, uint32_t chn, uint16_t cycle); //设置周期
uint16_t PWM_GetCycle(PWM_TypeDef * PWMx, uint32_t chn); //获取周期
void PWM_SetHDuty(PWM_TypeDef * PWMx, uint32_t chn, uint16_t hduty); //设置高电平时长
uint16_t PWM_GetHDuty(PWM_TypeDef * PWMx, uint32_t chn); //获取高电平时长
void PWM_SetDeadzone(PWM_TypeDef * PWMx, uint32_t chn, uint8_t deadzone); //设置死区时长
uint8_t PWM_GetDeadzone(PWM_TypeDef * PWMx, uint32_t chn); //获取死区时长
void PWM_SetCycle(PWM_TypeDef * PWMx, uint32_t chn, uint16_t cycle); //设置周期
uint16_t PWM_GetCycle(PWM_TypeDef * PWMx, uint32_t chn); //获取周期
void PWM_SetHDuty(PWM_TypeDef * PWMx, uint32_t chn, uint16_t hduty); //设置高电平时长
uint16_t PWM_GetHDuty(PWM_TypeDef * PWMx, uint32_t chn); //获取高电平时长
void PWM_SetDeadzone(PWM_TypeDef * PWMx, uint32_t chn, uint8_t deadzone); //设置死区时长
uint8_t PWM_GetDeadzone(PWM_TypeDef * PWMx, uint32_t chn); //获取死区时长
void PWM_IntNCycleEn(PWM_TypeDef * PWMx, uint32_t chn); //新周期开始中断使能
void PWM_IntNCycleDis(PWM_TypeDef * PWMx, uint32_t chn); //新周期开始中断禁能
void PWM_IntNCycleClr(PWM_TypeDef * PWMx, uint32_t chn); //新周期开始中断标志清除
uint32_t PWM_IntNCycleStat(PWM_TypeDef * PWMx, uint32_t chn); //新周期开始中断是否发生
void PWM_IntHEndEn(PWM_TypeDef * PWMx, uint32_t chn); //高电平结束中断使能
void PWM_IntHEndDis(PWM_TypeDef * PWMx, uint32_t chn); //高电平结束中断禁能
void PWM_IntHEndClr(PWM_TypeDef * PWMx, uint32_t chn); //高电平结束中断标志清除
uint32_t PWM_IntHEndStat(PWM_TypeDef * PWMx, uint32_t chn); //高电平结束中断是否发生
void PWM_IntNCycleEn(PWM_TypeDef * PWMx, uint32_t chn); //新周期开始中断使能
void PWM_IntNCycleDis(PWM_TypeDef * PWMx, uint32_t chn); //新周期开始中断禁能
void PWM_IntNCycleClr(PWM_TypeDef * PWMx, uint32_t chn); //新周期开始中断标志清除
uint32_t PWM_IntNCycleStat(PWM_TypeDef * PWMx, uint32_t chn); //新周期开始中断是否发生
void PWM_IntHEndEn(PWM_TypeDef * PWMx, uint32_t chn); //高电平结束中断使能
void PWM_IntHEndDis(PWM_TypeDef * PWMx, uint32_t chn); //高电平结束中断禁能
void PWM_IntHEndClr(PWM_TypeDef * PWMx, uint32_t chn); //高电平结束中断标志清除
uint32_t PWM_IntHEndStat(PWM_TypeDef * PWMx, uint32_t chn); //高电平结束中断是否发生
#endif //__SWM320_PWM_H__

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_rtc.c
* : SWM320单片机的RTC驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
* : SWM320_rtc.c
* : SWM320单片机的RTC驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
*
*
*******************************************************************************************************************************************
@ -24,18 +24,18 @@
static uint32_t calcWeekDay(uint32_t year, uint32_t month, uint32_t date);
/******************************************************************************************************************************************
* : RTC_Init()
* : RTC初始化
* : RTC_TypeDef * RTCx RTCRTC
* RTC_InitStructure * initStruct RTC相关设定值的结构体
* :
* :
* : RTC_Init()
* : RTC初始化
* : RTC_TypeDef * RTCx RTCRTC
* RTC_InitStructure * initStruct RTC相关设定值的结构体
* :
* :
******************************************************************************************************************************************/
void RTC_Init(RTC_TypeDef * RTCx, RTC_InitStructure * initStruct)
{
SYS->CLKEN |= (1 << SYS_CLKEN_RTCBKP_Pos);
SYS->LRCCR &= ~(1 << SYS_LRCCR_OFF_Pos); //RTC使用32KHz RC时钟
SYS->LRCCR &= ~(1 << SYS_LRCCR_OFF_Pos); //RTC使用32KHz RC时钟
SYS->CLKEN |= (1 << SYS_CLKEN_RTC_Pos) |
((uint32_t)1 << SYS_CLKEN_ALIVE_Pos);
@ -72,11 +72,11 @@ void RTC_Init(RTC_TypeDef * RTCx, RTC_InitStructure * initStruct)
}
/******************************************************************************************************************************************
* : RTC_Start()
* : RTC
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_Start()
* : RTC
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_Start(RTC_TypeDef * RTCx)
{
@ -84,11 +84,11 @@ void RTC_Start(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_Stop()
* : RTC
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_Stop()
* : RTC
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_Stop(RTC_TypeDef * RTCx)
{
@ -96,12 +96,12 @@ void RTC_Stop(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_GetDateTime()
* :
* : RTC_TypeDef * RTCx RTCRTC
* RTC_DateTime * dateTime
* :
* :
* : RTC_GetDateTime()
* :
* : RTC_TypeDef * RTCx RTCRTC
* RTC_DateTime * dateTime
* :
* :
******************************************************************************************************************************************/
void RTC_GetDateTime(RTC_TypeDef * RTCx, RTC_DateTime * dateTime)
{
@ -115,12 +115,12 @@ void RTC_GetDateTime(RTC_TypeDef * RTCx, RTC_DateTime * dateTime)
}
/******************************************************************************************************************************************
* : RTC_AlarmSetup()
* : RTC闹钟设定
* : RTC_TypeDef * RTCx RTCRTC
* RTC_AlarmStructure * alarmStruct RTC闹钟设定值的结构体
* :
* :
* : RTC_AlarmSetup()
* : RTC闹钟设定
* : RTC_TypeDef * RTCx RTCRTC
* RTC_AlarmStructure * alarmStruct RTC闹钟设定值的结构体
* :
* :
******************************************************************************************************************************************/
void RTC_AlarmSetup(RTC_TypeDef * RTCx, RTC_AlarmStructure * alarmStruct)
{
@ -143,13 +143,13 @@ void RTC_AlarmSetup(RTC_TypeDef * RTCx, RTC_AlarmStructure * alarmStruct)
}
/******************************************************************************************************************************************
* : calcWeekDay()
* :
* : uint32_t year
* uint32_t month
* uint32_t date
* : uint32_t 0 1 ... ... 6
* :
* : calcWeekDay()
* :
* : uint32_t year
* uint32_t month
* uint32_t date
* : uint32_t 0 1 ... ... 6
* :
******************************************************************************************************************************************/
static uint32_t calcWeekDay(uint32_t year, uint32_t month, uint32_t date)
{
@ -173,11 +173,11 @@ static uint32_t calcWeekDay(uint32_t year, uint32_t month, uint32_t date)
}
/******************************************************************************************************************************************
* : RTC_IntSecondEn()
* : 使
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntSecondEn()
* : 使
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntSecondEn(RTC_TypeDef * RTCx)
{
@ -185,11 +185,11 @@ void RTC_IntSecondEn(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntSecondDis()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntSecondDis()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntSecondDis(RTC_TypeDef * RTCx)
{
@ -197,11 +197,11 @@ void RTC_IntSecondDis(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntSecondClr()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntSecondClr()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntSecondClr(RTC_TypeDef * RTCx)
{
@ -209,11 +209,11 @@ void RTC_IntSecondClr(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntSecondStat()
* :
* : RTC_TypeDef * RTCx RTCRTC
* : uint32_t 1 0
* :
* : RTC_IntSecondStat()
* :
* : RTC_TypeDef * RTCx RTCRTC
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t RTC_IntSecondStat(RTC_TypeDef * RTCx)
{
@ -221,11 +221,11 @@ uint32_t RTC_IntSecondStat(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntMinuteEn()
* : 使
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntMinuteEn()
* : 使
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntMinuteEn(RTC_TypeDef * RTCx)
{
@ -233,11 +233,11 @@ void RTC_IntMinuteEn(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntMinuteDis()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntMinuteDis()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntMinuteDis(RTC_TypeDef * RTCx)
{
@ -245,11 +245,11 @@ void RTC_IntMinuteDis(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntMinuteClr()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntMinuteClr()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntMinuteClr(RTC_TypeDef * RTCx)
{
@ -257,11 +257,11 @@ void RTC_IntMinuteClr(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntMinuteStat()
* :
* : RTC_TypeDef * RTCx RTCRTC
* : uint32_t 1 0
* :
* : RTC_IntMinuteStat()
* :
* : RTC_TypeDef * RTCx RTCRTC
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t RTC_IntMinuteStat(RTC_TypeDef * RTCx)
{
@ -269,11 +269,11 @@ uint32_t RTC_IntMinuteStat(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntHourEn()
* : 使
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntHourEn()
* : 使
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntHourEn(RTC_TypeDef * RTCx)
{
@ -281,11 +281,11 @@ void RTC_IntHourEn(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntHourDis()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntHourDis()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntHourDis(RTC_TypeDef * RTCx)
{
@ -293,11 +293,11 @@ void RTC_IntHourDis(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntHourClr()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntHourClr()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntHourClr(RTC_TypeDef * RTCx)
{
@ -305,11 +305,11 @@ void RTC_IntHourClr(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntHourStat()
* :
* : RTC_TypeDef * RTCx RTCRTC
* : uint32_t 1 0
* :
* : RTC_IntHourStat()
* :
* : RTC_TypeDef * RTCx RTCRTC
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t RTC_IntHourStat(RTC_TypeDef * RTCx)
{
@ -317,11 +317,11 @@ uint32_t RTC_IntHourStat(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntDateEn()
* : 使
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntDateEn()
* : 使
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntDateEn(RTC_TypeDef * RTCx)
{
@ -329,11 +329,11 @@ void RTC_IntDateEn(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntDateDis()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntDateDis()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntDateDis(RTC_TypeDef * RTCx)
{
@ -341,11 +341,11 @@ void RTC_IntDateDis(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntDateClr()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntDateClr()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntDateClr(RTC_TypeDef * RTCx)
{
@ -353,11 +353,11 @@ void RTC_IntDateClr(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntDateStat()
* :
* : RTC_TypeDef * RTCx RTCRTC
* : uint32_t 1 0
* :
* : RTC_IntDateStat()
* :
* : RTC_TypeDef * RTCx RTCRTC
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t RTC_IntDateStat(RTC_TypeDef * RTCx)
{
@ -365,11 +365,11 @@ uint32_t RTC_IntDateStat(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntAlarmEn()
* : 使
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntAlarmEn()
* : 使
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntAlarmEn(RTC_TypeDef * RTCx)
{
@ -377,11 +377,11 @@ void RTC_IntAlarmEn(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntAlarmDis()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntAlarmDis()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntAlarmDis(RTC_TypeDef * RTCx)
{
@ -389,11 +389,11 @@ void RTC_IntAlarmDis(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntAlarmClr()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
* : RTC_IntAlarmClr()
* :
* : RTC_TypeDef * RTCx RTCRTC
* :
* :
******************************************************************************************************************************************/
void RTC_IntAlarmClr(RTC_TypeDef * RTCx)
{
@ -401,11 +401,11 @@ void RTC_IntAlarmClr(RTC_TypeDef * RTCx)
}
/******************************************************************************************************************************************
* : RTC_IntAlarmStat()
* :
* : RTC_TypeDef * RTCx RTCRTC
* : uint32_t 1 0
* :
* : RTC_IntAlarmStat()
* :
* : RTC_TypeDef * RTCx RTCRTC
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t RTC_IntAlarmStat(RTC_TypeDef * RTCx)
{

View File

@ -13,17 +13,17 @@
typedef struct {
uint16_t Year;
uint8_t Month; //取值1--12
uint8_t Date; //取值1--31
uint8_t Hour; //取值0--23
uint8_t Minute; //取值0--59
uint8_t Second; //取值0--59
uint8_t Month; //取值1--12
uint8_t Date; //取值1--31
uint8_t Hour; //取值0--23
uint8_t Minute; //取值0--59
uint8_t Second; //取值0--59
uint8_t SecondIEn;
uint8_t MinuteIEn;
} RTC_InitStructure;
typedef struct {
uint8_t Days; //RTC_SUN、RTC_MON、RTC_TUE、RTC_WED、RTC_THU、RTC_FRI、RTC_SAT及其或运算组合
uint8_t Days; //RTC_SUN、RTC_MON、RTC_TUE、RTC_WED、RTC_THU、RTC_FRI、RTC_SAT及其或运算组合
uint8_t Hour;
uint8_t Minute;
uint8_t Second;
@ -34,7 +34,7 @@ typedef struct {
uint16_t Year;
uint8_t Month;
uint8_t Date;
uint8_t Day; //RTC_SUN、RTC_MON、RTC_TUE、RTC_WED、RTC_THU、RTC_FRI、RTC_SAT
uint8_t Day; //RTC_SUN、RTC_MON、RTC_TUE、RTC_WED、RTC_THU、RTC_FRI、RTC_SAT
uint8_t Hour;
uint8_t Minute;
uint8_t Second;

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_sdio.c
* : SWM320单片机的SDIO接口驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* : 512
* : V1.1.0 20171025
* :
* : SWM320_sdio.c
* : SWM320单片机的SDIO接口驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* : 512
* : V1.1.0 20171025
* :
*
*
*******************************************************************************************************************************************
@ -25,11 +25,11 @@
SD_CardInfo SD_cardInfo;
/******************************************************************************************************************************************
* : SDIO_Init()
* : SDIO读写SD卡初始化4线512
* : uint32_t freq SDIO_CLK时钟频率
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
* : SDIO_Init()
* : SDIO读写SD卡初始化4线512
* : uint32_t freq SDIO_CLK时钟频率
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
******************************************************************************************************************************************/
uint32_t SDIO_Init(uint32_t freq)
{
@ -37,7 +37,7 @@ uint32_t SDIO_Init(uint32_t freq)
uint32_t resp, resps[4];
SYS->CLKDIV &= ~SYS_CLKDIV_SDIO_Msk;
if(SystemCoreClock > 80000000) //SDIO时钟需要小于52MHz
if(SystemCoreClock > 80000000) //SDIO时钟需要小于52MHz
SYS->CLKDIV |= (2 << SYS_CLKDIV_SDIO_Pos); //SDCLK = SYSCLK / 4
else
SYS->CLKDIV |= (1 << SYS_CLKDIV_SDIO_Pos); //SDCLK = SYSCLK / 2
@ -64,7 +64,7 @@ uint32_t SDIO_Init(uint32_t freq)
SDIO_SendCmd(SD_CMD_GO_IDLE_STATE, 0x00, SD_RESP_NO, 0); //CMD0: GO_IDLE_STATE
res = SDIO_SendCmd(SD_CMD_SEND_IF_COND, 0x1AA, SD_RESP_32b, &resp); //CMD8: SEND_IF_COND, 检测工作电压、检测是否支持SD 2.0
res = SDIO_SendCmd(SD_CMD_SEND_IF_COND, 0x1AA, SD_RESP_32b, &resp); //CMD8: SEND_IF_COND, 检测工作电压、检测是否支持SD 2.0
if(res != SD_RES_OK)
return res;
@ -77,50 +77,50 @@ uint32_t SDIO_Init(uint32_t freq)
if(res != SD_RES_OK)
return res;
if(resp != 0x120) return SD_RES_ERR; //不是SD卡可能是MMC卡
if(resp != 0x120) return SD_RES_ERR; //不是SD卡可能是MMC卡
if(SD_cardInfo.CardType == SDIO_STD_CAPACITY_SD_CARD_V2_0)
SDIO_SendCmd(SD_CMD_SD_APP_OP_COND, 0x80100000|0x40000000, SD_RESP_32b, &resp);
else
SDIO_SendCmd(SD_CMD_SD_APP_OP_COND, 0x80100000|0x00000000, SD_RESP_32b, &resp);
} while(((resp >> 31) & 0x01) == 0); //上电没完成时resp[31] == 0
} while(((resp >> 31) & 0x01) == 0); //上电没完成时resp[31] == 0
if(((resp >> 30) & 0x01) == 1) SD_cardInfo.CardType = SDIO_HIGH_CAPACITY_SD_CARD;
SDIO_SendCmd(SD_CMD_ALL_SEND_CID, 0x00, SD_RESP_128b, resps); //CMD2: SD_CMD_ALL_SEND_CID获取CID
SDIO_SendCmd(SD_CMD_ALL_SEND_CID, 0x00, SD_RESP_128b, resps); //CMD2: SD_CMD_ALL_SEND_CID获取CID
parseCID(resps);
SDIO_SendCmd(SD_CMD_SET_REL_ADDR, 0x00, SD_RESP_32b, &resp); //CMD3: SD_CMD_SET_REL_ADDR设置RCA
SDIO_SendCmd(SD_CMD_SET_REL_ADDR, 0x00, SD_RESP_32b, &resp); //CMD3: SD_CMD_SET_REL_ADDR设置RCA
SD_cardInfo.RCA = resp >> 16;
SDIO_SendCmd(SD_CMD_SEND_CSD, SD_cardInfo.RCA << 16, SD_RESP_128b, resps); //CMD9: SD_CMD_SEND_CSD获取CSD
SDIO_SendCmd(SD_CMD_SEND_CSD, SD_cardInfo.RCA << 16, SD_RESP_128b, resps); //CMD9: SD_CMD_SEND_CSD获取CSD
parseCSD(resps);
if(SD_cardInfo.CardBlockSize < 0x200) return SD_RES_ERR; //本驱动只支持以512字节为单位的读写所以最大读写单位必须不小于512
if(SD_cardInfo.CardBlockSize < 0x200) return SD_RES_ERR; //本驱动只支持以512字节为单位的读写所以最大读写单位必须不小于512
SDIO->CR2 &= ~(SDIO_CR2_SDCLKEN_Msk | SDIO_CR2_SDCLKDIV_Msk);
SDIO->CR2 |= (1 << SDIO_CR2_SDCLKEN_Pos) |
(calcSDCLKDiv(freq) << SDIO_CR2_SDCLKDIV_Pos); //初始化完成SDCLK切换到高速
(calcSDCLKDiv(freq) << SDIO_CR2_SDCLKDIV_Pos); //初始化完成SDCLK切换到高速
SDIO_SendCmd(SD_CMD_SEL_DESEL_CARD, SD_cardInfo.RCA << 16, SD_RESP_32b_busy, &resp); //CMD7: 选中卡从Standy模式进入Transfer模式
SDIO_SendCmd(SD_CMD_SEL_DESEL_CARD, SD_cardInfo.RCA << 16, SD_RESP_32b_busy, &resp); //CMD7: 选中卡从Standy模式进入Transfer模式
SDIO->IF = SDIO_IF_TRXDONE_Msk;
SDIO_SendCmd(SD_CMD_APP_CMD, SD_cardInfo.RCA << 16, SD_RESP_32b, &resp);
SDIO_SendCmd(SD_CMD_APP_SD_SET_BUSWIDTH, SD_BUSWIDTH_4b, SD_RESP_32b, &resp); //切换成4位总线模式
SDIO_SendCmd(SD_CMD_APP_SD_SET_BUSWIDTH, SD_BUSWIDTH_4b, SD_RESP_32b, &resp); //切换成4位总线模式
SDIO->CR1 |= (1 << SDIO_CR1_4BIT_Pos);
SDIO_SendCmd(SD_CMD_SET_BLOCKLEN, 512, SD_RESP_32b, &resp); //固定块大小位512字节
SDIO_SendCmd(SD_CMD_SET_BLOCKLEN, 512, SD_RESP_32b, &resp); //固定块大小位512字节
SDIO->BLK = 512;
@ -128,12 +128,12 @@ uint32_t SDIO_Init(uint32_t freq)
}
/******************************************************************************************************************************************
* : SDIO_BlockWrite()
* : SD卡写入数据
* : uint32_t block_addr SD卡块地址512
* uint32_t buff[]
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
* : SDIO_BlockWrite()
* : SD卡写入数据
* : uint32_t block_addr SD卡块地址512
* uint32_t buff[]
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
******************************************************************************************************************************************/
uint32_t SDIO_BlockWrite(uint32_t block_addr, uint32_t buff[])
{
@ -159,13 +159,13 @@ uint32_t SDIO_BlockWrite(uint32_t block_addr, uint32_t buff[])
}
/******************************************************************************************************************************************
* : SDIO_MultiBlockWrite()
* : SD卡写入多块数据
* : uint32_t block_addr SD卡块地址512
* uint16_t block_cnt
* uint32_t buff[]
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
* : SDIO_MultiBlockWrite()
* : SD卡写入多块数据
* : uint32_t block_addr SD卡块地址512
* uint16_t block_cnt
* uint32_t buff[]
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
******************************************************************************************************************************************/
uint32_t SDIO_MultiBlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[])
{
@ -194,13 +194,13 @@ uint32_t SDIO_MultiBlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t
}
/******************************************************************************************************************************************
* : SDIO_DMABlockWrite()
* : DMA向SD卡写入多块数据
* : uint32_t block_addr SD卡块地址512
* uint16_t block_cnt
* uint32_t buff[]
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
* : SDIO_DMABlockWrite()
* : DMA向SD卡写入多块数据
* : uint32_t block_addr SD卡块地址512
* uint16_t block_cnt
* uint32_t buff[]
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
******************************************************************************************************************************************/
uint32_t SDIO_DMABlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[])
{
@ -223,12 +223,12 @@ uint32_t SDIO_DMABlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t bu
}
/******************************************************************************************************************************************
* : SDIO_BlockRead()
* : SD卡读出数据
* : uint32_t block_addr SD卡块地址512
* uint32_t buff[]
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
* : SDIO_BlockRead()
* : SD卡读出数据
* : uint32_t block_addr SD卡块地址512
* uint32_t buff[]
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
******************************************************************************************************************************************/
uint32_t SDIO_BlockRead(uint32_t block_addr, uint32_t buff[])
{
@ -254,13 +254,13 @@ uint32_t SDIO_BlockRead(uint32_t block_addr, uint32_t buff[])
}
/******************************************************************************************************************************************
* : SDIO_MultiBlockRead()
* : SD卡读出多块数据
* : uint32_t block_addr SD卡块地址512
* uint16_t block_cnt
* uint32_t buff[]
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
* : SDIO_MultiBlockRead()
* : SD卡读出多块数据
* : uint32_t block_addr SD卡块地址512
* uint16_t block_cnt
* uint32_t buff[]
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
******************************************************************************************************************************************/
uint32_t SDIO_MultiBlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[])
{
@ -289,13 +289,13 @@ uint32_t SDIO_MultiBlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t b
}
/******************************************************************************************************************************************
* : SDIO_DMABlockRead()
* : DMA从SD卡读出多块数据
* : uint32_t block_addr SD卡块地址512
* uint16_t block_cnt
* uint32_t buff[]
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
* : SDIO_DMABlockRead()
* : DMA从SD卡读出多块数据
* : uint32_t block_addr SD卡块地址512
* uint16_t block_cnt
* uint32_t buff[]
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
******************************************************************************************************************************************/
uint32_t SDIO_DMABlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[])
{
@ -318,20 +318,20 @@ uint32_t SDIO_DMABlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buf
}
/******************************************************************************************************************************************
* : _SDIO_SendCmd()
* : SDIO向SD卡发送命令
* : uint32_t cmd
* uint32_t arg
* uint32_t _resp_type SD_RESP_NOSD_RESP_32bSD_RESP_128bSD_RESP_32b_busy
* uint32_t *resp_data
* uint32_t have_data
* uint32_t data_read 1 SD卡 0 SD卡
* uint16_t block_cnt
* uint32_t use_dma 1 使DMA搬运数据
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
* : _SDIO_SendCmd()
* : SDIO向SD卡发送命令
* : uint32_t cmd
* uint32_t arg
* uint32_t resp_type SD_RESP_NOSD_RESP_32bSD_RESP_128bSD_RESP_32b_busy
* uint32_t *resp_data
* uint32_t have_data
* uint32_t data_read 1 SD卡 0 SD卡
* uint16_t block_cnt
* uint32_t use_dma 1 使DMA搬运数据
* : uint32_t SD_RES_OK SD_RES_ERR SD_RES_TIMEOUT
* :
******************************************************************************************************************************************/
uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t _resp_type, uint32_t *resp_data, uint32_t have_data, uint32_t data_read, uint16_t block_cnt, uint32_t use_dma)
uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t resp_type, uint32_t *resp_data, uint32_t have_data, uint32_t data_read, uint16_t block_cnt, uint32_t use_dma)
{
SDIO->BLK &= ~SDIO_BLK_COUNT_Msk;
SDIO->BLK |= (block_cnt << SDIO_BLK_COUNT_Pos);
@ -341,7 +341,7 @@ uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t _resp_type, uint32_t
(0 << SDIO_CMD_CMDTYPE_Pos) |
(0 << SDIO_CMD_IDXCHECK_Pos) |
(0 << SDIO_CMD_CRCCHECK_Pos) |
(_resp_type << SDIO_CMD_RESPTYPE_Pos) |
(resp_type << SDIO_CMD_RESPTYPE_Pos) |
(have_data << SDIO_CMD_HAVEDATA_Pos) |
(data_read << SDIO_CMD_DIRREAD_Pos) |
((block_cnt > 1) << SDIO_CMD_MULTBLK_Pos) |
@ -366,14 +366,14 @@ uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t _resp_type, uint32_t
}
SDIO->IF = SDIO_IF_CMDDONE_Msk;
if(_resp_type == SD_RESP_32b)
if(resp_type == SD_RESP_32b)
{
resp_data[0] = SDIO->RESP[0];
}
else if(_resp_type == SD_RESP_128b)
else if(resp_type == SD_RESP_128b)
{
//寄存器中将CID/CSD[127-8]依次存放在了RESP3-0[119-0]最低位的CRC被丢掉
//读出数据时调整了顺序将CID/CSD[127-8]存放在resp_data0-3[127-8]最低8位填充0x00
//寄存器中将CID/CSD[127-8]依次存放在了RESP3-0[119-0]最低位的CRC被丢掉
//读出数据时调整了顺序将CID/CSD[127-8]存放在resp_data0-3[127-8]最低8位填充0x00
resp_data[0] = (SDIO->RESP[3] << 8) + ((SDIO->RESP[2] >> 24) & 0xFF);
resp_data[1] = (SDIO->RESP[2] << 8) + ((SDIO->RESP[1] >> 24) & 0xFF);
resp_data[2] = (SDIO->RESP[1] << 8) + ((SDIO->RESP[0] >> 24) & 0xFF);
@ -538,7 +538,7 @@ void parseCSD(uint32_t CSD_Tab[4])
/*!< Byte 10 */
tmp = (uint8_t)((CSD_Tab[2] & 0x0000FF00) >> 8);
SD_cardInfo.CardCapacity = (SD_cardInfo.SD_csd.DeviceSize + 1) * 512 * 1024;
SD_cardInfo.CardCapacity = (uint64_t)(SD_cardInfo.SD_csd.DeviceSize + 1) * 512 * 1024;
SD_cardInfo.CardBlockSize = 512;
}

View File

@ -35,10 +35,10 @@
#define SD_CMD_SDIO_RW_EXTENDED ((uint8_t)53)
#define SD_RESP_NO 0 //0 无响应
#define SD_RESP_32b 2 //2 32位响应
#define SD_RESP_128b 1 //1 128位响应
#define SD_RESP_32b_busy 3 //3 32位响应check Busy after response
#define SD_RESP_NO 0 //0 无响应
#define SD_RESP_32b 2 //2 32位响应
#define SD_RESP_128b 1 //1 128位响应
#define SD_RESP_32b_busy 3 //3 32位响应check Busy after response
#define SD_BUSWIDTH_1b 0
#define SD_BUSWIDTH_4b 2
@ -133,11 +133,11 @@ uint32_t SDIO_MultiBlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t b
uint32_t SDIO_DMABlockWrite(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[]);
uint32_t SDIO_DMABlockRead(uint32_t block_addr, uint16_t block_cnt, uint32_t buff[]);
uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t _resp_type, uint32_t *resp_data, uint32_t have_data, uint32_t data_read, uint16_t block_cnt, uint32_t use_dma);
uint32_t _SDIO_SendCmd(uint32_t cmd, uint32_t arg, uint32_t resp_type, uint32_t *resp_data, uint32_t have_data, uint32_t data_read, uint16_t block_cnt, uint32_t use_dma);
#define SDIO_SendCmd(cmd, arg, _resp_type, resp_data) _SDIO_SendCmd(cmd, arg, _resp_type, resp_data, 0, 0, 0, 0)
#define SDIO_SendCmdWithData(cmd, arg, _resp_type, resp_data, data_read, block_cnt) _SDIO_SendCmd(cmd, arg, _resp_type, resp_data, 1, data_read, block_cnt, 0)
#define SDIO_SendCmdWithDataByDMA(cmd, arg, _resp_type, resp_data, data_read, block_cnt) _SDIO_SendCmd(cmd, arg, _resp_type, resp_data, 1, data_read, block_cnt, 1)
#define SDIO_SendCmd(cmd, arg, resp_type, resp_data) _SDIO_SendCmd(cmd, arg, resp_type, resp_data, 0, 0, 0, 0)
#define SDIO_SendCmdWithData(cmd, arg, resp_type, resp_data, data_read, block_cnt) _SDIO_SendCmd(cmd, arg, resp_type, resp_data, 1, data_read, block_cnt, 0)
#define SDIO_SendCmdWithDataByDMA(cmd, arg, resp_type, resp_data, data_read, block_cnt) _SDIO_SendCmd(cmd, arg, resp_type, resp_data, 1, data_read, block_cnt, 1)
void parseCID(uint32_t CID_Tab[4]);
void parseCSD(uint32_t CID_Tab[4]);

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_sdram.c
* : SWM320单片机的SDRAM驱动程序
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
* : SWM320_sdram.c
* : SWM320单片机的SDRAM驱动程序
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
*
*
*******************************************************************************************************************************************
@ -22,11 +22,11 @@
#include "SWM320_sdram.h"
/******************************************************************************************************************************************
* : SDRAM_Init()
* : SDRAM控制器初始化
* : SDRAM_InitStructure * initStruct SDRAM
* :
* :
* : SDRAM_Init()
* : SDRAM控制器初始化
* : SDRAM_InitStructure * initStruct SDRAM
* :
* :
******************************************************************************************************************************************/
void SDRAM_Init(SDRAM_InitStructure * initStruct)
{
@ -35,9 +35,9 @@ void SDRAM_Init(SDRAM_InitStructure * initStruct)
SYS->CLKEN |= (1 << SYS_CLKEN_SDRAM_Pos);
SYS->CLKDIV &= ~SYS_CLKDIV_SDRAM_Msk;
SYS->CLKDIV |= (1 << SYS_CLKDIV_SDRAM_Pos); //2分频
SYS->CLKDIV |= (1 << SYS_CLKDIV_SDRAM_Pos); //2分频
SDRAMC->CR0 = (2 << SDRAMC_CR0_BURSTLEN_Pos) | //2 Burst Length为4
SDRAMC->CR0 = (2 << SDRAMC_CR0_BURSTLEN_Pos) | //2 Burst Length为4
(initStruct->CASLatency << SDRAMC_CR0_CASDELAY_Pos);
SDRAMC->CR1 = (initStruct->CellSize << SDRAMC_CR1_CELLSIZE_Pos) |
@ -69,11 +69,11 @@ void SDRAM_Init(SDRAM_InitStructure * initStruct)
}
/******************************************************************************************************************************************
* : SDRAM_Enable()
* : SDRAM使能使SDRAM
* :
* :
* :
* : SDRAM_Enable()
* : SDRAM使能使SDRAM
* :
* :
* :
******************************************************************************************************************************************/
void SDRAM_Enable(void)
{
@ -86,11 +86,11 @@ void SDRAM_Enable(void)
}
/******************************************************************************************************************************************
* : SDRAM_Disable()
* : SDRAM禁能SDRAM颗粒进入低功耗模式
* :
* :
* :
* : SDRAM_Disable()
* : SDRAM禁能SDRAM颗粒进入低功耗模式
* :
* :
* :
******************************************************************************************************************************************/
void SDRAM_Disable(void)
{

View File

@ -2,17 +2,17 @@
#define __SWM320_SDRAM_H__
typedef struct {
uint8_t CellSize; // SDRAM颗粒的容量SDRAM_CELLSIZE_16Mb、SDRAM_CELLSIZE_64Mb、SDRAM_CELLSIZE_128Mb、SDRAM_CELLSIZE_256Mb
uint8_t CellBank; // SDRAM颗粒有几个bankSDRAM_CELLBANK_2、SDRAM_CELLBANK_4
uint8_t CellWidth; // SDRAM颗粒的位宽SDRAM_CELLWIDTH_16、SDRAM_CELLWIDTH_32
uint8_t CASLatency; // 列地址到有效数据输出间隔SDRAM_CASLATENCY_2、SDRAM_CASLATENCY_3
uint8_t CellSize; // SDRAM颗粒的容量SDRAM_CELLSIZE_16Mb、SDRAM_CELLSIZE_64Mb、SDRAM_CELLSIZE_128Mb、SDRAM_CELLSIZE_256Mb
uint8_t CellBank; // SDRAM颗粒有几个bankSDRAM_CELLBANK_2、SDRAM_CELLBANK_4
uint8_t CellWidth; // SDRAM颗粒的位宽SDRAM_CELLWIDTH_16、SDRAM_CELLWIDTH_32
uint8_t CASLatency; // 列地址到有效数据输出间隔SDRAM_CASLATENCY_2、SDRAM_CASLATENCY_3
uint8_t TimeTMRD; // MRS to New Command
uint8_t TimeTRRD; // Activate to activate on different banks
uint8_t TimeTRAS; // Self refresh time最小Self-refresh周期
uint8_t TimeTRC; // Row cycle delayRefresh命令到Activate命令间延时也是两个连续Refresh命令间延时
uint8_t TimeTRCD; // Row to column delay行地址到列地址间延时也即Activate命令到读写命令间延时
uint8_t TimeTRP; // Row precharge delayPrecharge命令到另一个命令间延时
uint8_t TimeTRAS; // Self refresh time最小Self-refresh周期
uint8_t TimeTRC; // Row cycle delayRefresh命令到Activate命令间延时也是两个连续Refresh命令间延时
uint8_t TimeTRCD; // Row to column delay行地址到列地址间延时也即Activate命令到读写命令间延时
uint8_t TimeTRP; // Row precharge delayPrecharge命令到另一个命令间延时
} SDRAM_InitStructure;
#define SDRAM_CELLSIZE_16Mb 3

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_spi.c
* : SWM320单片机的SPI功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
* : SWM320_spi.c
* : SWM320单片机的SPI功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
*
*
*******************************************************************************************************************************************
@ -23,12 +23,12 @@
/******************************************************************************************************************************************
* : SPI_Init()
* : SPI同步串行接口初始化FIFO触发设定
* : SPI_TypeDef * SPIx SPISPI0SPI1
* SPI_InitStructure * initStruct SPI相关设定值的结构体
* :
* :
* : SPI_Init()
* : SPI同步串行接口初始化FIFO触发设定
* : SPI_TypeDef * SPIx SPISPI0SPI1
* SPI_InitStructure * initStruct SPI相关设定值的结构体
* :
* :
******************************************************************************************************************************************/
void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct)
{
@ -39,11 +39,11 @@ void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct)
break;
case ((uint32_t)SPI1):
SYS->CLKEN |= (0x01 << SYS_CLKEN_SPI0_Pos); //与SPI0使用同一位时钟使能
SYS->CLKEN |= (0x01 << SYS_CLKEN_SPI0_Pos); //与SPI0使用同一位时钟使能
break;
}
SPI_Close(SPIx); //一些关键寄存器只能在SPI关闭时设置
SPI_Close(SPIx); //一些关键寄存器只能在SPI关闭时设置
SPIx->CTRL &= ~(SPI_CTRL_FFS_Msk | SPI_CTRL_CPHA_Msk | SPI_CTRL_CPOL_Msk |
SPI_CTRL_SIZE_Msk | SPI_CTRL_MSTR_Msk | SPI_CTRL_CLKDIV_Msk | SPI_CTRL_SSN_H_Msk);
@ -55,7 +55,7 @@ void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct)
(initStruct->clkDiv << SPI_CTRL_CLKDIV_Pos) |
(0 << SPI_CTRL_SSN_H_Pos);
SPIx->IF = (0x01 << SPI_IF_RFOVF_Pos); //清除中断标志
SPIx->IF = (0x01 << SPI_IF_RFOVF_Pos); //清除中断标志
SPIx->IE &= ~(SPI_IE_RFHF_Msk | SPI_IE_TFHF_Msk | SPI_IE_FTC_Msk);
SPIx->IE |= (initStruct->RXHFullIEn << SPI_IE_RFHF_Pos) |
(initStruct->TXEmptyIEn << SPI_IE_TFHF_Pos) |
@ -88,11 +88,11 @@ void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct)
}
/******************************************************************************************************************************************
* : SPI_Open()
* : SPI打开
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_Open()
* : SPI打开
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_Open(SPI_TypeDef * SPIx)
{
@ -100,11 +100,11 @@ void SPI_Open(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_Close()
* : SPI关闭
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_Close()
* : SPI关闭
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_Close(SPI_TypeDef * SPIx)
{
@ -112,11 +112,11 @@ void SPI_Close(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_Read()
* :
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t
* :
* : SPI_Read()
* :
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t
* :
******************************************************************************************************************************************/
uint32_t SPI_Read(SPI_TypeDef * SPIx)
{
@ -124,12 +124,12 @@ uint32_t SPI_Read(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_Write()
* :
* : SPI_TypeDef * SPIx SPISPI0SPI1
* uint32_t
* :
* :
* : SPI_Write()
* :
* : SPI_TypeDef * SPIx SPISPI0SPI1
* uint32_t
* :
* :
******************************************************************************************************************************************/
void SPI_Write(SPI_TypeDef * SPIx, uint32_t data)
{
@ -137,12 +137,12 @@ void SPI_Write(SPI_TypeDef * SPIx, uint32_t data)
}
/******************************************************************************************************************************************
* : SPI_WriteWithWait()
* :
* : SPI_TypeDef * SPIx SPISPI0SPI1SPI1
* uint32_t
* :
* :
* : SPI_WriteWithWait()
* :
* : SPI_TypeDef * SPIx SPISPI0SPI1SPI1
* uint32_t
* :
* :
******************************************************************************************************************************************/
void SPI_WriteWithWait(SPI_TypeDef * SPIx, uint32_t data)
{
@ -154,12 +154,12 @@ void SPI_WriteWithWait(SPI_TypeDef * SPIx, uint32_t data)
}
/******************************************************************************************************************************************
* : SPI_ReadWrite()
* :
* : SPI_TypeDef * SPIx SPISPI0SPI1
* uint32_t data
* : uint32_t
* : SPI模块SPI_Write()SPI_Write()SPI_STAT_RFNE状态
* : SPI_ReadWrite()
* :
* : SPI_TypeDef * SPIx SPISPI0SPI1
* uint32_t data
* : uint32_t
* : SPI模块SPI_Write()SPI_Write()SPI_STAT_RFNE状态
******************************************************************************************************************************************/
uint32_t SPI_ReadWrite(SPI_TypeDef * SPIx, uint32_t data)
{
@ -170,11 +170,11 @@ uint32_t SPI_ReadWrite(SPI_TypeDef * SPIx, uint32_t data)
}
/******************************************************************************************************************************************
* : SPI_IsRXEmpty()
* : FIFO是否空SPI_Read()
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO空 0 FIFO非空
* :
* : SPI_IsRXEmpty()
* : FIFO是否空SPI_Read()
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO空 0 FIFO非空
* :
******************************************************************************************************************************************/
uint32_t SPI_IsRXEmpty(SPI_TypeDef * SPIx)
{
@ -182,11 +182,11 @@ uint32_t SPI_IsRXEmpty(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_IsTXFull()
* : FIFO是否满SPI_Write()
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO满 0 FIFO不满
* :
* : SPI_IsTXFull()
* : FIFO是否满SPI_Write()
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO满 0 FIFO不满
* :
******************************************************************************************************************************************/
uint32_t SPI_IsTXFull(SPI_TypeDef * SPIx)
{
@ -194,11 +194,11 @@ uint32_t SPI_IsTXFull(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_IsTXEmpty()
* : FIFO是否空
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO空 0 FIFO非空
* :
* : SPI_IsTXEmpty()
* : FIFO是否空
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO空 0 FIFO非空
* :
******************************************************************************************************************************************/
uint32_t SPI_IsTXEmpty(SPI_TypeDef * SPIx)
{
@ -207,11 +207,11 @@ uint32_t SPI_IsTXEmpty(SPI_TypeDef * SPIx)
/******************************************************************************************************************************************
* : SPI_INTRXHalfFullEn()
* : FIFO半满中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTRXHalfFullEn()
* : FIFO半满中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTRXHalfFullEn(SPI_TypeDef * SPIx)
{
@ -219,11 +219,11 @@ void SPI_INTRXHalfFullEn(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTRXHalfFullDis()
* : FIFO半满中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTRXHalfFullDis()
* : FIFO半满中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTRXHalfFullDis(SPI_TypeDef * SPIx)
{
@ -231,11 +231,11 @@ void SPI_INTRXHalfFullDis(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTRXHalfFullClr()
* : FIFO半满中断标志清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTRXHalfFullClr()
* : FIFO半满中断标志清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTRXHalfFullClr(SPI_TypeDef * SPIx)
{
@ -243,11 +243,11 @@ void SPI_INTRXHalfFullClr(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTRXHalfFullStat()
* : FIFO半满中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO达到半满 0 FIFO未达到半满
* :
* : SPI_INTRXHalfFullStat()
* : FIFO半满中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO达到半满 0 FIFO未达到半满
* :
******************************************************************************************************************************************/
uint32_t SPI_INTRXHalfFullStat(SPI_TypeDef * SPIx)
{
@ -255,11 +255,11 @@ uint32_t SPI_INTRXHalfFullStat(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTRXFullEn()
* : FIFO满中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTRXFullEn()
* : FIFO满中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTRXFullEn(SPI_TypeDef * SPIx)
{
@ -267,11 +267,11 @@ void SPI_INTRXFullEn(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTRXFullDis()
* : FIFO满中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTRXFullDis()
* : FIFO满中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTRXFullDis(SPI_TypeDef * SPIx)
{
@ -279,11 +279,11 @@ void SPI_INTRXFullDis(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTRXFullClr()
* : FIFO满中断标志清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTRXFullClr()
* : FIFO满中断标志清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTRXFullClr(SPI_TypeDef * SPIx)
{
@ -291,11 +291,11 @@ void SPI_INTRXFullClr(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTRXFullStat()
* : FIFO满中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO满 0 FIFO未满
* :
* : SPI_INTRXFullStat()
* : FIFO满中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO满 0 FIFO未满
* :
******************************************************************************************************************************************/
uint32_t SPI_INTRXFullStat(SPI_TypeDef * SPIx)
{
@ -303,11 +303,11 @@ uint32_t SPI_INTRXFullStat(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTRXOverflowEn()
* : FIFO溢出中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTRXOverflowEn()
* : FIFO溢出中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTRXOverflowEn(SPI_TypeDef * SPIx)
{
@ -315,11 +315,11 @@ void SPI_INTRXOverflowEn(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTRXOverflowDis()
* : FIFO溢出中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTRXOverflowDis()
* : FIFO溢出中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTRXOverflowDis(SPI_TypeDef * SPIx)
{
@ -327,11 +327,11 @@ void SPI_INTRXOverflowDis(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTRXOverflowClr()
* : FIFO溢出中断标志清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTRXOverflowClr()
* : FIFO溢出中断标志清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTRXOverflowClr(SPI_TypeDef * SPIx)
{
@ -339,11 +339,11 @@ void SPI_INTRXOverflowClr(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTRXOverflowStat()
* : FIFO溢出中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO溢出 0 FIFO未溢出
* :
* : SPI_INTRXOverflowStat()
* : FIFO溢出中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO溢出 0 FIFO未溢出
* :
******************************************************************************************************************************************/
uint32_t SPI_INTRXOverflowStat(SPI_TypeDef * SPIx)
{
@ -351,11 +351,11 @@ uint32_t SPI_INTRXOverflowStat(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXHalfFullEn()
* : FIFO半满中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTTXHalfFullEn()
* : FIFO半满中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTTXHalfFullEn(SPI_TypeDef * SPIx)
{
@ -363,11 +363,11 @@ void SPI_INTTXHalfFullEn(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXHalfFullDis()
* : FIFO半满中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTTXHalfFullDis()
* : FIFO半满中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTTXHalfFullDis(SPI_TypeDef * SPIx)
{
@ -375,11 +375,11 @@ void SPI_INTTXHalfFullDis(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXHalfFullClr()
* : FIFO半满中断标志清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTTXHalfFullClr()
* : FIFO半满中断标志清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTTXHalfFullClr(SPI_TypeDef * SPIx)
{
@ -387,11 +387,11 @@ void SPI_INTTXHalfFullClr(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXHalfFullStat()
* : FIFO半满中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO达到半满 0 FIFO未达到半满
* :
* : SPI_INTTXHalfFullStat()
* : FIFO半满中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO达到半满 0 FIFO未达到半满
* :
******************************************************************************************************************************************/
uint32_t SPI_INTTXHalfFullStat(SPI_TypeDef * SPIx)
{
@ -399,11 +399,11 @@ uint32_t SPI_INTTXHalfFullStat(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXEmptyEn()
* : FIFO空中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTTXEmptyEn()
* : FIFO空中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTTXEmptyEn(SPI_TypeDef * SPIx)
{
@ -411,11 +411,11 @@ void SPI_INTTXEmptyEn(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXEmptyDis()
* : FIFO空中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTTXEmptyDis()
* : FIFO空中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTTXEmptyDis(SPI_TypeDef * SPIx)
{
@ -423,11 +423,11 @@ void SPI_INTTXEmptyDis(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXEmptyClr()
* : FIFO空中断标志清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTTXEmptyClr()
* : FIFO空中断标志清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTTXEmptyClr(SPI_TypeDef * SPIx)
{
@ -435,11 +435,11 @@ void SPI_INTTXEmptyClr(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXEmptyStat()
* : FIFO空中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO空 0 FIFO非空
* :
* : SPI_INTTXEmptyStat()
* : FIFO空中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO空 0 FIFO非空
* :
******************************************************************************************************************************************/
uint32_t SPI_INTTXEmptyStat(SPI_TypeDef * SPIx)
{
@ -447,11 +447,11 @@ uint32_t SPI_INTTXEmptyStat(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXCompleteEn()
* : FIFO空且发送移位寄存器空中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTTXCompleteEn()
* : FIFO空且发送移位寄存器空中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTTXCompleteEn(SPI_TypeDef * SPIx)
{
@ -459,11 +459,11 @@ void SPI_INTTXCompleteEn(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXCompleteDis()
* : FIFO空且发送移位寄存器空中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTTXCompleteDis()
* : FIFO空且发送移位寄存器空中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTTXCompleteDis(SPI_TypeDef * SPIx)
{
@ -471,11 +471,11 @@ void SPI_INTTXCompleteDis(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXCompleteClr()
* : FIFO空且发送移位寄存器空中断状态清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTTXCompleteClr()
* : FIFO空且发送移位寄存器空中断状态清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTTXCompleteClr(SPI_TypeDef * SPIx)
{
@ -483,11 +483,11 @@ void SPI_INTTXCompleteClr(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXCompleteStat()
* : FIFO空且发送移位寄存器空中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO空且发送移位寄存器空 0 FIFO或发送移位寄存器非空
* :
* : SPI_INTTXCompleteStat()
* : FIFO空且发送移位寄存器空中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 FIFO空且发送移位寄存器空 0 FIFO或发送移位寄存器非空
* :
******************************************************************************************************************************************/
uint32_t SPI_INTTXCompleteStat(SPI_TypeDef * SPIx)
{
@ -495,11 +495,11 @@ uint32_t SPI_INTTXCompleteStat(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXWordCompleteEn()
* : FIFO字发送完成中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTTXWordCompleteEn()
* : FIFO字发送完成中断使能
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTTXWordCompleteEn(SPI_TypeDef * SPIx)
{
@ -507,11 +507,11 @@ void SPI_INTTXWordCompleteEn(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXWordCompleteDis()
* : FIFO字发送完成中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTTXWordCompleteDis()
* : FIFO字发送完成中断禁止
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTTXWordCompleteDis(SPI_TypeDef * SPIx)
{
@ -519,11 +519,11 @@ void SPI_INTTXWordCompleteDis(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXWordCompleteClr()
* : FIFO字发送完成中断标志清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
* : SPI_INTTXWordCompleteClr()
* : FIFO字发送完成中断标志清除
* : SPI_TypeDef * SPIx SPISPI0SPI1
* :
* :
******************************************************************************************************************************************/
void SPI_INTTXWordCompleteClr(SPI_TypeDef * SPIx)
{
@ -531,11 +531,11 @@ void SPI_INTTXWordCompleteClr(SPI_TypeDef * SPIx)
}
/******************************************************************************************************************************************
* : SPI_INTTXWordCompleteStat()
* : FIFO字发送完成中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 0
* :
* : SPI_INTTXWordCompleteStat()
* : FIFO字发送完成中断状态
* : SPI_TypeDef * SPIx SPISPI0SPI1
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t SPI_INTTXWordCompleteStat(SPI_TypeDef * SPIx)
{

View File

@ -2,26 +2,26 @@
#define __SWM320_SPI_H__
typedef struct {
uint8_t FrameFormat; //帧格式SPI_FORMAT_SPI、SPI_FORMAT_TI_SSI
uint8_t SampleEdge; //在SPI帧格式下选择数据采样边沿SPI_FIRST_EDGE、SPI_SECOND_EDGE
uint8_t IdleLevel; //在SPI帧格式下选择空闲时无数据传输时时钟线的电平SPI_LOW_LEVEL、SPI_HIGH_LEVEL
uint8_t WordSize; //字长度, 有效值4-16
uint8_t Master; //1 主机模式 0 从机模式
uint8_t clkDiv; //SPI_CLK = SYS_CLK / clkDiv有效值SPI_CLKDIV_4、SPI_CLKDIV_8、... ... 、SPI_CLKDIV_512
uint8_t FrameFormat; //帧格式SPI_FORMAT_SPI、SPI_FORMAT_TI_SSI
uint8_t SampleEdge; //在SPI帧格式下选择数据采样边沿SPI_FIRST_EDGE、SPI_SECOND_EDGE
uint8_t IdleLevel; //在SPI帧格式下选择空闲时无数据传输时时钟线的电平SPI_LOW_LEVEL、SPI_HIGH_LEVEL
uint8_t WordSize; //字长度, 有效值4-16
uint8_t Master; //1 主机模式 0 从机模式
uint8_t clkDiv; //SPI_CLK = SYS_CLK / clkDiv有效值SPI_CLKDIV_4、SPI_CLKDIV_8、... ... 、SPI_CLKDIV_512
uint8_t RXHFullIEn; //接收FIFO半满中断使能
uint8_t TXEmptyIEn; //发送FIFO 空中断使能
uint8_t TXCompleteIEn; //发送FIFO 空且发送移位寄存器空中断使能
uint8_t RXHFullIEn; //接收FIFO半满中断使能
uint8_t TXEmptyIEn; //发送FIFO 空中断使能
uint8_t TXCompleteIEn; //发送FIFO 空且发送移位寄存器空中断使能
} SPI_InitStructure;
#define SPI_FORMAT_SPI 0 //Motorola SPI 格式
#define SPI_FORMAT_TI_SSI 1 //TI SSI 格式
#define SPI_FORMAT_SPI 0 //Motorola SPI 格式
#define SPI_FORMAT_TI_SSI 1 //TI SSI 格式
#define SPI_FIRST_EDGE 0 //第一个时钟沿开始采样
#define SPI_SECOND_EDGE 1 //第二个时钟沿开始采样
#define SPI_FIRST_EDGE 0 //第一个时钟沿开始采样
#define SPI_SECOND_EDGE 1 //第二个时钟沿开始采样
#define SPI_LOW_LEVEL 0 //空闲时时钟线保持低电平
#define SPI_HIGH_LEVEL 1 //空闲时时钟线保持高电平
#define SPI_LOW_LEVEL 0 //空闲时时钟线保持低电平
#define SPI_HIGH_LEVEL 1 //空闲时时钟线保持高电平
#define SPI_CLKDIV_4 0
#define SPI_CLKDIV_8 1
@ -34,18 +34,18 @@ typedef struct {
void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct); //SPI初始化
void SPI_Open(SPI_TypeDef * SPIx); //SPI打开允许收发
void SPI_Close(SPI_TypeDef * SPIx); //SPI关闭禁止收发
void SPI_Init(SPI_TypeDef * SPIx, SPI_InitStructure * initStruct); //SPI初始化
void SPI_Open(SPI_TypeDef * SPIx); //SPI打开允许收发
void SPI_Close(SPI_TypeDef * SPIx); //SPI关闭禁止收发
uint32_t SPI_Read(SPI_TypeDef * SPIx);
void SPI_Write(SPI_TypeDef * SPIx, uint32_t data);
void SPI_WriteWithWait(SPI_TypeDef * SPIx, uint32_t data);
uint32_t SPI_ReadWrite(SPI_TypeDef * SPIx, uint32_t data);
uint32_t SPI_IsRXEmpty(SPI_TypeDef * SPIx); //接收FIFO是否空如果不空则可以继续SPI_Read()
uint32_t SPI_IsTXFull(SPI_TypeDef * SPIx); //发送FIFO是否满如果不满则可以继续SPI_Write()
uint32_t SPI_IsTXEmpty(SPI_TypeDef * SPIx); //发送FIFO是否空
uint32_t SPI_IsRXEmpty(SPI_TypeDef * SPIx); //接收FIFO是否空如果不空则可以继续SPI_Read()
uint32_t SPI_IsTXFull(SPI_TypeDef * SPIx); //发送FIFO是否满如果不满则可以继续SPI_Write()
uint32_t SPI_IsTXEmpty(SPI_TypeDef * SPIx); //发送FIFO是否空
void SPI_INTRXHalfFullEn(SPI_TypeDef * SPIx);

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_sram.c
* : SWM320单片机的SRAM驱动程序
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
* : SWM320_sram.c
* : SWM320单片机的SRAM驱动程序
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
*
*
*******************************************************************************************************************************************
@ -23,17 +23,17 @@
/******************************************************************************************************************************************
* : SRAM_Init()
* : SRAM控制器初始化
* : SRAM_InitStructure * initStruct SRAM
* :
* :
* : SRAM_Init()
* : SRAM控制器初始化
* : SRAM_InitStructure * initStruct SRAM
* :
* :
******************************************************************************************************************************************/
void SRAM_Init(SRAM_InitStructure * initStruct)
{
uint32_t i;
// 配置SRAM前需要刷新下SDRAM控制器
// 配置SRAM前需要刷新下SDRAM控制器
do {
SYS->CLKEN |= (1 << SYS_CLKEN_SDRAM_Pos);
@ -49,5 +49,5 @@ void SRAM_Init(SRAM_InitStructure * initStruct)
SRAMC->CR = (initStruct->ClkDiv << SRAMC_CR_RWTIME_Pos) |
(initStruct->DataWidth << SRAMC_CR_BYTEIF_Pos) |
(0 << SRAMC_CR_HBLBDIS_Pos); // 使能字节、半字访问
(0 << SRAMC_CR_HBLBDIS_Pos); // 使能字节、半字访问
}

View File

@ -2,8 +2,8 @@
#define __SWM320_SRAM_H__
typedef struct {
uint8_t ClkDiv; //SRAM_CLKDIV_5...SRAM_CLKDIV_16根据SRAM芯片所能跑的最高频率选择合适分频
uint8_t DataWidth; //SRAM_DATAWIDTH_8、SRAM_DATAWIDTH_16
uint8_t ClkDiv; //SRAM_CLKDIV_5...SRAM_CLKDIV_16根据SRAM芯片所能跑的最高频率选择合适分频
uint8_t DataWidth; //SRAM_DATAWIDTH_8、SRAM_DATAWIDTH_16
} SRAM_InitStructure;

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_timr.c
* : SWM320单片机的计数器/
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
* : SWM320_timr.c
* : SWM320单片机的计数器/
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
*
*
*******************************************************************************************************************************************
@ -23,20 +23,20 @@
/******************************************************************************************************************************************
* : TIMR_Init()
* : TIMR定时器/
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* uint32_t mode TIMR_MODE_TIMER TIMR_MODE_COUNTER
* uint32_t period /
* uint32_t int_en 使
* :
* :
* : TIMR_Init()
* : TIMR定时器/
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* uint32_t mode TIMR_MODE_TIMER TIMR_MODE_COUNTER
* uint32_t period /
* uint32_t int_en 使
* :
* :
******************************************************************************************************************************************/
void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t period, uint32_t int_en)
{
SYS->CLKEN |= (0x01 << SYS_CLKEN_TIMR_Pos);
TIMR_Stop(TIMRx); //一些关键寄存器只能在定时器停止时设置
TIMR_Stop(TIMRx); //一些关键寄存器只能在定时器停止时设置
TIMRx->CTRL &= ~TIMR_CTRL_CLKSRC_Msk;
TIMRx->CTRL |= mode << TIMR_CTRL_CLKSRC_Pos;
@ -46,7 +46,7 @@ void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t period, uint32_t in
switch((uint32_t)TIMRx)
{
case ((uint32_t)TIMR0):
TIMRG->IF = (1 << TIMRG_IF_TIMR0_Pos); //使能中断前清除中断标志
TIMRG->IF = (1 << TIMRG_IF_TIMR0_Pos); //使能中断前清除中断标志
TIMRG->IE &= ~TIMRG_IE_TIMR0_Msk;
TIMRG->IE |= (int_en << TIMRG_IE_TIMR0_Pos);
@ -96,11 +96,11 @@ void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t period, uint32_t in
}
/******************************************************************************************************************************************
* : TIMR_Start()
* : /
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
* : TIMR_Start()
* : /
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
******************************************************************************************************************************************/
void TIMR_Start(TIMR_TypeDef * TIMRx)
{
@ -108,11 +108,11 @@ void TIMR_Start(TIMR_TypeDef * TIMRx)
}
/******************************************************************************************************************************************
* : TIMR_Stop()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
* : TIMR_Stop()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
******************************************************************************************************************************************/
void TIMR_Stop(TIMR_TypeDef * TIMRx)
{
@ -120,11 +120,11 @@ void TIMR_Stop(TIMR_TypeDef * TIMRx)
}
/******************************************************************************************************************************************
* : TIMR_Halt()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
* : TIMR_Halt()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
******************************************************************************************************************************************/
void TIMR_Halt(TIMR_TypeDef * TIMRx)
{
@ -157,11 +157,11 @@ void TIMR_Halt(TIMR_TypeDef * TIMRx)
}
/******************************************************************************************************************************************
* : TIMR_Resume()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
* : TIMR_Resume()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
******************************************************************************************************************************************/
void TIMR_Resume(TIMR_TypeDef * TIMRx)
{
@ -194,12 +194,12 @@ void TIMR_Resume(TIMR_TypeDef * TIMRx)
}
/******************************************************************************************************************************************
* : TIMR_SetPeriod()
* : /
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* uint32_t period /
* :
* :
* : TIMR_SetPeriod()
* : /
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* uint32_t period /
* :
* :
******************************************************************************************************************************************/
void TIMR_SetPeriod(TIMR_TypeDef * TIMRx, uint32_t period)
{
@ -207,11 +207,11 @@ void TIMR_SetPeriod(TIMR_TypeDef * TIMRx, uint32_t period)
}
/******************************************************************************************************************************************
* : TIMR_GetPeriod()
* : /
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* : uint32_t /
* :
* : TIMR_GetPeriod()
* : /
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* : uint32_t /
* :
******************************************************************************************************************************************/
uint32_t TIMR_GetPeriod(TIMR_TypeDef * TIMRx)
{
@ -219,11 +219,11 @@ uint32_t TIMR_GetPeriod(TIMR_TypeDef * TIMRx)
}
/******************************************************************************************************************************************
* : TIMR_GetCurValue()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* : uint32_t
* :
* : TIMR_GetCurValue()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* : uint32_t
* :
******************************************************************************************************************************************/
uint32_t TIMR_GetCurValue(TIMR_TypeDef * TIMRx)
{
@ -231,11 +231,11 @@ uint32_t TIMR_GetCurValue(TIMR_TypeDef * TIMRx)
}
/******************************************************************************************************************************************
* : TIMR_INTEn()
* : 使
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
* : TIMR_INTEn()
* : 使
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
******************************************************************************************************************************************/
void TIMR_INTEn(TIMR_TypeDef * TIMRx)
{
@ -274,11 +274,11 @@ void TIMR_INTEn(TIMR_TypeDef * TIMRx)
}
/******************************************************************************************************************************************
* : TIMR_INTDis()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
* : TIMR_INTDis()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
******************************************************************************************************************************************/
void TIMR_INTDis(TIMR_TypeDef * TIMRx)
{
@ -311,11 +311,11 @@ void TIMR_INTDis(TIMR_TypeDef * TIMRx)
}
/******************************************************************************************************************************************
* : TIMR_INTClr()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
* : TIMR_INTClr()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* :
* :
******************************************************************************************************************************************/
void TIMR_INTClr(TIMR_TypeDef * TIMRx)
{
@ -348,11 +348,11 @@ void TIMR_INTClr(TIMR_TypeDef * TIMRx)
}
/******************************************************************************************************************************************
* : TIMR_INTStat()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* : uint32_t 0 TIMRx未产生中断 1 TIMRx产生了中断
* :
* : TIMR_INTStat()
* :
* : TIMR_TypeDef * TIMRx TIMR0TIMR1TIMR2TIMR3TIMR4TIMR5
* : uint32_t 0 TIMRx未产生中断 1 TIMRx产生了中断
* :
******************************************************************************************************************************************/
uint32_t TIMR_INTStat(TIMR_TypeDef * TIMRx)
{
@ -382,32 +382,32 @@ uint32_t TIMR_INTStat(TIMR_TypeDef * TIMRx)
/******************************************************************************************************************************************
* : Pulse_Init()
* :
* : uint32_t pulse PULSE_LOW PULSE_HIGH
* uint32_t int_en 使
* :
* :
* : Pulse_Init()
* :
* : uint32_t pulse PULSE_LOW PULSE_HIGH
* uint32_t int_en 使
* :
* :
******************************************************************************************************************************************/
void Pulse_Init(uint32_t pulse, uint32_t int_en)
{
SYS->CLKEN |= (0x01 << SYS_CLKEN_TIMR_Pos);
TIMRG->PCTRL = (0 << TIMRG_PCTRL_CLKSRC_Pos) | // 系统时钟作为时钟源
TIMRG->PCTRL = (0 << TIMRG_PCTRL_CLKSRC_Pos) | // 系统时钟作为时钟源
(pulse << TIMRG_PCTRL_HIGH_Pos) |
(0 << TIMRG_PCTRL_EN_Pos);
TIMRG->IE |= (1 << TIMRG_IE_PULSE_Pos); //使能才能查询中断标志
TIMRG->IE |= (1 << TIMRG_IE_PULSE_Pos); //使能才能查询中断标志
if(int_en) NVIC_EnableIRQ(PULSE_IRQn);
}
/******************************************************************************************************************************************
* : Pulse_Start()
* :
* :
* :
* :
* : Pulse_Start()
* :
* :
* :
* :
******************************************************************************************************************************************/
void Pulse_Start(void)
{
@ -415,17 +415,17 @@ void Pulse_Start(void)
}
/******************************************************************************************************************************************
* : Pulse_Done()
* :
* :
* : uint32_t 1 0
* :
* : Pulse_Done()
* :
* :
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t Pulse_Done(void)
{
if(TIMRG->IF & TIMRG_IF_PULSE_Msk)
{
TIMRG->IF = TIMRG_IF_PULSE_Msk; // 清除中断标志
TIMRG->IF = TIMRG_IF_PULSE_Msk; // 清除中断标志
return 1;
}

View File

@ -4,20 +4,20 @@
#define TIMR_MODE_TIMER 0
#define TIMR_MODE_COUNTER 1
void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t period, uint32_t int_en); //定时器/计数器初始化
void TIMR_Start(TIMR_TypeDef * TIMRx); //启动定时器,从初始值开始计时/计数
void TIMR_Stop(TIMR_TypeDef * TIMRx); //停止定时器
void TIMR_Halt(TIMR_TypeDef * TIMRx); //暂停定时器,计数值保持不变
void TIMR_Resume(TIMR_TypeDef * TIMRx); //恢复定时器,从暂停处继续计数
void TIMR_Init(TIMR_TypeDef * TIMRx, uint32_t mode, uint32_t period, uint32_t int_en); //定时器/计数器初始化
void TIMR_Start(TIMR_TypeDef * TIMRx); //启动定时器,从初始值开始计时/计数
void TIMR_Stop(TIMR_TypeDef * TIMRx); //停止定时器
void TIMR_Halt(TIMR_TypeDef * TIMRx); //暂停定时器,计数值保持不变
void TIMR_Resume(TIMR_TypeDef * TIMRx); //恢复定时器,从暂停处继续计数
void TIMR_SetPeriod(TIMR_TypeDef * TIMRx, uint32_t period); //设置定时/计数周期
uint32_t TIMR_GetPeriod(TIMR_TypeDef * TIMRx); //获取定时/计数周期
uint32_t TIMR_GetCurValue(TIMR_TypeDef * TIMRx); //获取当前计数值
void TIMR_SetPeriod(TIMR_TypeDef * TIMRx, uint32_t period); //设置定时/计数周期
uint32_t TIMR_GetPeriod(TIMR_TypeDef * TIMRx); //获取定时/计数周期
uint32_t TIMR_GetCurValue(TIMR_TypeDef * TIMRx); //获取当前计数值
void TIMR_INTEn(TIMR_TypeDef * TIMRx); //使能中断
void TIMR_INTDis(TIMR_TypeDef * TIMRx); //禁能中断
void TIMR_INTClr(TIMR_TypeDef * TIMRx); //清除中断标志
uint32_t TIMR_INTStat(TIMR_TypeDef * TIMRx); //获取中断状态
void TIMR_INTEn(TIMR_TypeDef * TIMRx); //使能中断
void TIMR_INTDis(TIMR_TypeDef * TIMRx); //禁能中断
void TIMR_INTClr(TIMR_TypeDef * TIMRx); //清除中断标志
uint32_t TIMR_INTStat(TIMR_TypeDef * TIMRx); //获取中断状态

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_uart.c
* : SWM320单片机的UART串口功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* : LIN功能相关的函数
* : V1.1.0 20171025
* :
* : SWM320_uart.c
* : SWM320单片机的UART串口功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* : LIN功能相关的函数
* : V1.1.0 20171025
* :
*
*
*******************************************************************************************************************************************
@ -23,12 +23,12 @@
/******************************************************************************************************************************************
* : UART_Init()
* : UART串口初始化
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* UART_InitStructure * initStruct UART串口相关设定值的结构体
* :
* :
* : UART_Init()
* : UART串口初始化
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* UART_InitStructure * initStruct UART串口相关设定值的结构体
* :
* :
******************************************************************************************************************************************/
void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct)
{
@ -51,7 +51,7 @@ void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct)
break;
}
UART_Close(UARTx); //一些关键寄存器只能在串口关闭时设置
UART_Close(UARTx); //一些关键寄存器只能在串口关闭时设置
UARTx->CTRL |= (0x01 << UART_CTRL_BAUDEN_Pos);
UARTx->BAUD &= ~UART_BAUD_BAUD_Msk;
@ -62,10 +62,10 @@ void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct)
(initStruct->Parity << UART_CTRL_PARITY_Pos) |
(initStruct->StopBits << UART_CTRL_STOP2b_Pos);
/* 在SWM320中当 RXLVL >= RXTHR 时触发中断如果RXTHR设置为0的话在未接收到数据时就会一直触发中断
RXLVL > RXTHR SWM320中RXTHR不能为0的问题APIRXTHR设置值加一
/* 在SWM320中当 RXLVL >= RXTHR 时触发中断如果RXTHR设置为0的话在未接收到数据时就会一直触发中断
RXLVL > RXTHR SWM320中RXTHR不能为0的问题APIRXTHR设置值加一
*/
switch((uint32_t)UARTx) // 软件复位不能清零 NVIC 寄存器,若不手动清除,下面的代码清零 RXTHR 时会导致一直进入 ISR
switch((uint32_t)UARTx) // 软件复位不能清零 NVIC 寄存器,若不手动清除,下面的代码清零 RXTHR 时会导致一直进入 ISR
{
case ((uint32_t)UART0): NVIC_DisableIRQ(UART0_IRQn); break;
case ((uint32_t)UART1): NVIC_DisableIRQ(UART1_IRQn); break;
@ -133,11 +133,11 @@ void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct)
}
/******************************************************************************************************************************************
* : UART_Open()
* : UART串口打开
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
* : UART_Open()
* : UART串口打开
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
******************************************************************************************************************************************/
void UART_Open(UART_TypeDef * UARTx)
{
@ -145,11 +145,11 @@ void UART_Open(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_Close()
* : UART串口关闭
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
* : UART_Close()
* : UART串口关闭
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
******************************************************************************************************************************************/
void UART_Close(UART_TypeDef * UARTx)
{
@ -157,12 +157,12 @@ void UART_Close(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_WriteByte()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3UART4
* uint32_t data
* :
* :
* : UART_WriteByte()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3UART4
* uint32_t data
* :
* :
******************************************************************************************************************************************/
void UART_WriteByte(UART_TypeDef * UARTx, uint32_t data)
{
@ -170,12 +170,12 @@ void UART_WriteByte(UART_TypeDef * UARTx, uint32_t data)
}
/******************************************************************************************************************************************
* : UART_ReadByte()
* : Valid
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3UART4
* uint32_t * data
* : uint32_t 0 UART_ERR_PARITY
* :
* : UART_ReadByte()
* : Valid
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3UART4
* uint32_t * data
* : uint32_t 0 UART_ERR_PARITY
* :
******************************************************************************************************************************************/
uint32_t UART_ReadByte(UART_TypeDef * UARTx, uint32_t * data)
{
@ -189,11 +189,11 @@ uint32_t UART_ReadByte(UART_TypeDef * UARTx, uint32_t * data)
}
/******************************************************************************************************************************************
* : UART_IsTXBusy()
* : UART是否正在发送数据
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 UART正在发送数据 0
* :
* : UART_IsTXBusy()
* : UART是否正在发送数据
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 UART正在发送数据 0
* :
******************************************************************************************************************************************/
uint32_t UART_IsTXBusy(UART_TypeDef * UARTx)
{
@ -201,11 +201,11 @@ uint32_t UART_IsTXBusy(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_IsRXFIFOEmpty()
* : FIFO是否为空
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 FIFO空 0 FIFO非空
* :
* : UART_IsRXFIFOEmpty()
* : FIFO是否为空
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 FIFO空 0 FIFO非空
* :
******************************************************************************************************************************************/
uint32_t UART_IsRXFIFOEmpty(UART_TypeDef * UARTx)
{
@ -213,11 +213,11 @@ uint32_t UART_IsRXFIFOEmpty(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_IsTXFIFOFull()
* : FIFO是否为满
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 FIFO满 0 FIFO不满
* :
* : UART_IsTXFIFOFull()
* : FIFO是否为满
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 FIFO满 0 FIFO不满
* :
******************************************************************************************************************************************/
uint32_t UART_IsTXFIFOFull(UART_TypeDef * UARTx)
{
@ -225,12 +225,12 @@ uint32_t UART_IsTXFIFOFull(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_SetBaudrate()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t baudrate
* :
* : 使UART_Close()
* : UART_SetBaudrate()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t baudrate
* :
* : 使UART_Close()
******************************************************************************************************************************************/
void UART_SetBaudrate(UART_TypeDef * UARTx, uint32_t baudrate)
{
@ -239,11 +239,11 @@ void UART_SetBaudrate(UART_TypeDef * UARTx, uint32_t baudrate)
}
/******************************************************************************************************************************************
* : UART_GetBaudrate()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t
* :
* : UART_GetBaudrate()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t
* :
******************************************************************************************************************************************/
uint32_t UART_GetBaudrate(UART_TypeDef * UARTx)
{
@ -251,13 +251,13 @@ uint32_t UART_GetBaudrate(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_CTSConfig()
* : UART CTS流控配置
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t enable 1 使CTS流控 0 CTS流控
* uint32_t polarity 0 CTS输入为低表示可以发送数据 1 CTS输入为高表示可以发送数据
* :
* :
* : UART_CTSConfig()
* : UART CTS流控配置
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t enable 1 使CTS流控 0 CTS流控
* uint32_t polarity 0 CTS输入为低表示可以发送数据 1 CTS输入为高表示可以发送数据
* :
* :
******************************************************************************************************************************************/
void UART_CTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity)
{
@ -267,11 +267,11 @@ void UART_CTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity)
}
/******************************************************************************************************************************************
* : UART_CTSLineState()
* : UART CTS线当前状态
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 0 CTS线当前为低电平 1 CTS线当前为高电平
* :
* : UART_CTSLineState()
* : UART CTS线当前状态
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 0 CTS线当前为低电平 1 CTS线当前为高电平
* :
******************************************************************************************************************************************/
uint32_t UART_CTSLineState(UART_TypeDef * UARTx)
{
@ -279,14 +279,14 @@ uint32_t UART_CTSLineState(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_RTSConfig()
* : UART RTS流控配置
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t enable 1 使RTS流控 0 RTS流控
* uint32_t polarity 0 RTS输出低表示可以接收数据 1 RTS输出高表示可以接收数据
* uint32_t threshold RTS流控的触发阈值UART_RTS_1BYTEUART_RTS_2BYTEUART_RTS_4BYTEUART_RTS_6BYTE
* :
* :
* : UART_RTSConfig()
* : UART RTS流控配置
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t enable 1 使RTS流控 0 RTS流控
* uint32_t polarity 0 RTS输出低表示可以接收数据 1 RTS输出高表示可以接收数据
* uint32_t threshold RTS流控的触发阈值UART_RTS_1BYTEUART_RTS_2BYTEUART_RTS_4BYTEUART_RTS_6BYTE
* :
* :
******************************************************************************************************************************************/
void UART_RTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity, uint32_t threshold)
{
@ -297,11 +297,11 @@ void UART_RTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity, ui
}
/******************************************************************************************************************************************
* : UART_RTSLineState()
* : UART RTS线当前状态
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 0 RTS线当前为低电平 1 RTS线当前为高电平
* :
* : UART_RTSLineState()
* : UART RTS线当前状态
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 0 RTS线当前为低电平 1 RTS线当前为高电平
* :
******************************************************************************************************************************************/
uint32_t UART_RTSLineState(UART_TypeDef * UARTx)
{
@ -309,13 +309,13 @@ uint32_t UART_RTSLineState(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_LINConfig()
* : UART LIN功能配置
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t detectedIEn Break中断使能
* uint32_t generatedIEn Break发送完成中断使能
* :
* :
* : UART_LINConfig()
* : UART LIN功能配置
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t detectedIEn Break中断使能
* uint32_t generatedIEn Break发送完成中断使能
* :
* :
******************************************************************************************************************************************/
void UART_LINConfig(UART_TypeDef * UARTx, uint32_t detectedIEn, uint32_t generatedIEn)
{
@ -325,11 +325,11 @@ void UART_LINConfig(UART_TypeDef * UARTx, uint32_t detectedIEn, uint32_t generat
}
/******************************************************************************************************************************************
* : UART_LINGenerate()
* : UART LIN产生/Break
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
* : UART_LINGenerate()
* : UART LIN产生/Break
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
******************************************************************************************************************************************/
void UART_LINGenerate(UART_TypeDef * UARTx)
{
@ -337,11 +337,11 @@ void UART_LINGenerate(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_LINIsDetected()
* : UART LIN是否检测到Break
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 LIN Break 0 LIN Break
* :
* : UART_LINIsDetected()
* : UART LIN是否检测到Break
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 LIN Break 0 LIN Break
* :
******************************************************************************************************************************************/
uint32_t UART_LINIsDetected(UART_TypeDef * UARTx)
{
@ -349,11 +349,11 @@ uint32_t UART_LINIsDetected(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_LINIsGenerated()
* : UART LIN Break是否发送完成
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 LIN Break 0 LIN Break发送未完成
* :
* : UART_LINIsGenerated()
* : UART LIN Break是否发送完成
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 LIN Break 0 LIN Break发送未完成
* :
******************************************************************************************************************************************/
uint32_t UART_LINIsGenerated(UART_TypeDef * UARTx)
{
@ -361,14 +361,14 @@ uint32_t UART_LINIsGenerated(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_ABRStart()
* : UART
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t detectChar
* 80xFF0xFE0xF80x800xFF0xFE0xF80x80
* 90x1FF0x1FE0x1F80x1800x1FF0x1FE0x1F80x180
* :
* :
* : UART_ABRStart()
* : UART
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t detectChar
* 80xFF0xFE0xF80x800xFF0xFE0xF80x80
* 90x1FF0x1FE0x1F80x1800x1FF0x1FE0x1F80x180
* :
* :
******************************************************************************************************************************************/
void UART_ABRStart(UART_TypeDef * UARTx, uint32_t detectChar)
{
@ -386,11 +386,11 @@ void UART_ABRStart(UART_TypeDef * UARTx, uint32_t detectChar)
}
/******************************************************************************************************************************************
* : UART_ABRIsDone()
* : UART
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 0 UART_ABR_RES_OK UART_ABR_RES_ERR
* :
* : UART_ABRIsDone()
* : UART
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 0 UART_ABR_RES_OK UART_ABR_RES_ERR
* :
******************************************************************************************************************************************/
uint32_t UART_ABRIsDone(UART_TypeDef * UARTx)
{
@ -409,11 +409,11 @@ uint32_t UART_ABRIsDone(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_INTRXThresholdEn()
* : RX FIFO中数据个数 >= RXThreshold时
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
* : UART_INTRXThresholdEn()
* : RX FIFO中数据个数 >= RXThreshold时
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
******************************************************************************************************************************************/
void UART_INTRXThresholdEn(UART_TypeDef * UARTx)
{
@ -421,11 +421,11 @@ void UART_INTRXThresholdEn(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_INTRXThresholdDis()
* : RX FIFO中数据个数 >= RXThreshold时
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
* : UART_INTRXThresholdDis()
* : RX FIFO中数据个数 >= RXThreshold时
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
******************************************************************************************************************************************/
void UART_INTRXThresholdDis(UART_TypeDef * UARTx)
{
@ -433,11 +433,11 @@ void UART_INTRXThresholdDis(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_INTRXThresholdStat()
* : RX FIFO中数据个数 >= RXThreshold
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 RX FIFO中数据个数 >= RXThreshold 0 RX FIFO中数据个数 < RXThreshold
* : RXIF = RXTHRF & RXIE
* : UART_INTRXThresholdStat()
* : RX FIFO中数据个数 >= RXThreshold
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 RX FIFO中数据个数 >= RXThreshold 0 RX FIFO中数据个数 < RXThreshold
* : RXIF = RXTHRF & RXIE
******************************************************************************************************************************************/
uint32_t UART_INTRXThresholdStat(UART_TypeDef * UARTx)
{
@ -445,11 +445,11 @@ uint32_t UART_INTRXThresholdStat(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_INTTXThresholdEn()
* : TX FIFO中数据个数 <= TXThreshold时
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
* : UART_INTTXThresholdEn()
* : TX FIFO中数据个数 <= TXThreshold时
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
******************************************************************************************************************************************/
void UART_INTTXThresholdEn(UART_TypeDef * UARTx)
{
@ -457,11 +457,11 @@ void UART_INTTXThresholdEn(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_INTTXThresholdDis()
* : TX FIFO中数据个数 <= TXThreshold时
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
* : UART_INTTXThresholdDis()
* : TX FIFO中数据个数 <= TXThreshold时
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
******************************************************************************************************************************************/
void UART_INTTXThresholdDis(UART_TypeDef * UARTx)
{
@ -469,11 +469,11 @@ void UART_INTTXThresholdDis(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_INTTXThresholdStat()
* : TX FIFO中数据个数 <= TXThreshold
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 TX FIFO中数据个数 <= TXThreshold 0 TX FIFO中数据个数 > TXThreshold
* : TXIF = TXTHRF & TXIE
* : UART_INTTXThresholdStat()
* : TX FIFO中数据个数 <= TXThreshold
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 TX FIFO中数据个数 <= TXThreshold 0 TX FIFO中数据个数 > TXThreshold
* : TXIF = TXTHRF & TXIE
******************************************************************************************************************************************/
uint32_t UART_INTTXThresholdStat(UART_TypeDef * UARTx)
{
@ -481,11 +481,11 @@ uint32_t UART_INTTXThresholdStat(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_INTTimeoutEn()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
* : UART_INTTimeoutEn()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
******************************************************************************************************************************************/
void UART_INTTimeoutEn(UART_TypeDef * UARTx)
{
@ -493,11 +493,11 @@ void UART_INTTimeoutEn(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_INTTimeoutDis()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
* : UART_INTTimeoutDis()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
******************************************************************************************************************************************/
void UART_INTTimeoutDis(UART_TypeDef * UARTx)
{
@ -505,11 +505,11 @@ void UART_INTTimeoutDis(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_INTTimeoutStat()
* : TimeoutTime/(Baudrate/10) RX线上接收到数据时触发中断
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 0
* :
* : UART_INTTimeoutStat()
* : TimeoutTime/(Baudrate/10) RX线上接收到数据时触发中断
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t UART_INTTimeoutStat(UART_TypeDef * UARTx)
{
@ -517,11 +517,11 @@ uint32_t UART_INTTimeoutStat(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_INTTXDoneEn()
* : FIFO空且发送移位寄存器空中断使能
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
* : UART_INTTXDoneEn()
* : FIFO空且发送移位寄存器空中断使能
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
******************************************************************************************************************************************/
void UART_INTTXDoneEn(UART_TypeDef * UARTx)
{
@ -529,11 +529,11 @@ void UART_INTTXDoneEn(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_INTTXDoneDis()
* : FIFO空且发送移位寄存器空中断禁止
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
* : UART_INTTXDoneDis()
* : FIFO空且发送移位寄存器空中断禁止
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
******************************************************************************************************************************************/
void UART_INTTXDoneDis(UART_TypeDef * UARTx)
{
@ -541,11 +541,11 @@ void UART_INTTXDoneDis(UART_TypeDef * UARTx)
}
/******************************************************************************************************************************************
* : UART_INTTXDoneStat()
* : FIFO空且发送移位寄存器空中断状态
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 FIFO空且发送移位寄存器空 0 FIFO或发送移位寄存器未空
* :
* : UART_INTTXDoneStat()
* : FIFO空且发送移位寄存器空中断状态
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 FIFO空且发送移位寄存器空 0 FIFO或发送移位寄存器未空
* :
******************************************************************************************************************************************/
uint32_t UART_INTTXDoneStat(UART_TypeDef * UARTx)
{

View File

@ -4,20 +4,20 @@
typedef struct {
uint32_t Baudrate;
uint8_t DataBits; //数据位位数可取值UART_DATA_8BIT、UART_DATA_9BIT
uint8_t DataBits; //数据位位数可取值UART_DATA_8BIT、UART_DATA_9BIT
uint8_t Parity; //奇偶校验位可取值UART_PARITY_NONE、UART_PARITY_ODD、UART_PARITY_EVEN、UART_PARITY_ONE、UART_PARITY_ZERO
uint8_t Parity; //奇偶校验位可取值UART_PARITY_NONE、UART_PARITY_ODD、UART_PARITY_EVEN、UART_PARITY_ONE、UART_PARITY_ZERO
uint8_t StopBits; //停止位位数可取值UART_STOP_1BIT、UART_STOP_2BIT
uint8_t StopBits; //停止位位数可取值UART_STOP_1BIT、UART_STOP_2BIT
uint8_t RXThreshold; //取值0--7
uint8_t RXThresholdIEn; //当RX FIFO中数据个数 > RXThreshold时触发中断
uint8_t RXThreshold; //取值0--7
uint8_t RXThresholdIEn; //当RX FIFO中数据个数 > RXThreshold时触发中断
uint8_t TXThreshold; //取值0--7
uint8_t TXThresholdIEn; //当TX FIFO中数据个数 <= TXThreshold时触发中断
uint8_t TXThreshold; //取值0--7
uint8_t TXThresholdIEn; //当TX FIFO中数据个数 <= TXThreshold时触发中断
uint8_t TimeoutTime; //超时时长 = TimeoutTime/(Baudrate/10) 秒
uint8_t TimeoutIEn; //超时中断RX FIFO非空且超过 TimeoutTime/(Baudrate/10) 秒没有在RX线上接收到数据时触发中断
uint8_t TimeoutTime; //超时时长 = TimeoutTime/(Baudrate/10) 秒
uint8_t TimeoutIEn; //超时中断RX FIFO非空且超过 TimeoutTime/(Baudrate/10) 秒没有在RX线上接收到数据时触发中断
} UART_InitStructure;
@ -46,20 +46,20 @@ typedef struct {
#define UART_ERR_NOISE 3
void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct); //UART串口初始化
void UART_Init(UART_TypeDef * UARTx, UART_InitStructure * initStruct); //UART串口初始化
void UART_Open(UART_TypeDef * UARTx);
void UART_Close(UART_TypeDef * UARTx);
void UART_WriteByte(UART_TypeDef * UARTx, uint32_t data); //发送一个字节数据
uint32_t UART_ReadByte(UART_TypeDef * UARTx, uint32_t * data); //读取一个字节数据并指出数据是否Valid
void UART_WriteByte(UART_TypeDef * UARTx, uint32_t data); //发送一个字节数据
uint32_t UART_ReadByte(UART_TypeDef * UARTx, uint32_t * data); //读取一个字节数据并指出数据是否Valid
uint32_t UART_IsTXBusy(UART_TypeDef * UARTx);
uint32_t UART_IsRXFIFOEmpty(UART_TypeDef * UARTx); //接收FIFO是否空如果不空则可以继续UART_ReadByte()
uint32_t UART_IsTXFIFOFull(UART_TypeDef * UARTx); //发送FIFO是否满如果不满则可以继续UART_WriteByte()
uint32_t UART_IsRXFIFOEmpty(UART_TypeDef * UARTx); //接收FIFO是否空如果不空则可以继续UART_ReadByte()
uint32_t UART_IsTXFIFOFull(UART_TypeDef * UARTx); //发送FIFO是否满如果不满则可以继续UART_WriteByte()
void UART_SetBaudrate(UART_TypeDef * UARTx, uint32_t baudrate); //设置波特率
uint32_t UART_GetBaudrate(UART_TypeDef * UARTx); //获取当前使用的波特率
void UART_SetBaudrate(UART_TypeDef * UARTx, uint32_t baudrate); //设置波特率
uint32_t UART_GetBaudrate(UART_TypeDef * UARTx); //获取当前使用的波特率
void UART_CTSConfig(UART_TypeDef * UARTx, uint32_t enable, uint32_t polarity);
uint32_t UART_CTSLineState(UART_TypeDef * UARTx);

View File

@ -1,10 +1,10 @@
/******************************************************************************************************************************************
* : SWM320_wdt.c
* : SWM320单片机的WDT看门狗功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
* : SWM320_wdt.c
* : SWM320单片机的WDT看门狗功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* :
* : V1.1.0 20171025
* :
*
*
*******************************************************************************************************************************************
@ -23,19 +23,19 @@
/******************************************************************************************************************************************
* : WDT_Init()
* : WDT看门狗初始化
* : WDT_TypeDef * WDTx WDT
* uint32_t peroid 0--4294967295
* uint32_t mode WDT_MODE_RESET WDT_MODE_INTERRUPT
* :
* : 使
* : WDT_Init()
* : WDT看门狗初始化
* : WDT_TypeDef * WDTx WDT
* uint32_t peroid 0--4294967295
* uint32_t mode WDT_MODE_RESET WDT_MODE_INTERRUPT
* :
* : 使
******************************************************************************************************************************************/
void WDT_Init(WDT_TypeDef * WDTx, uint32_t peroid, uint32_t mode)
{
SYS->CLKEN |= (0x01 << SYS_CLKEN_WDT_Pos);
WDT_Stop(WDTx); //设置前先关闭
WDT_Stop(WDTx); //设置前先关闭
WDTx->LOAD = peroid;
@ -54,11 +54,11 @@ void WDT_Init(WDT_TypeDef * WDTx, uint32_t peroid, uint32_t mode)
}
/******************************************************************************************************************************************
* : WDT_Start()
* : WDT
* : WDT_TypeDef * WDTx WDT
* :
* :
* : WDT_Start()
* : WDT
* : WDT_TypeDef * WDTx WDT
* :
* :
******************************************************************************************************************************************/
void WDT_Start(WDT_TypeDef * WDTx)
{
@ -66,11 +66,11 @@ void WDT_Start(WDT_TypeDef * WDTx)
}
/******************************************************************************************************************************************
* : WDT_Stop()
* : WDT
* : WDT_TypeDef * WDTx WDT
* :
* :
* : WDT_Stop()
* : WDT
* : WDT_TypeDef * WDTx WDT
* :
* :
******************************************************************************************************************************************/
void WDT_Stop(WDT_TypeDef * WDTx)
{
@ -78,11 +78,11 @@ void WDT_Stop(WDT_TypeDef * WDTx)
}
/******************************************************************************************************************************************
* : WDT_Feed()
* :
* : WDT_TypeDef * WDTx WDT
* :
* :
* : WDT_Feed()
* :
* : WDT_TypeDef * WDTx WDT
* :
* :
******************************************************************************************************************************************/
void WDT_Feed(WDT_TypeDef * WDTx)
{
@ -90,11 +90,11 @@ void WDT_Feed(WDT_TypeDef * WDTx)
}
/******************************************************************************************************************************************
* : WDT_GetValue()
* :
* : WDT_TypeDef * WDTx WDT
* : int32_t
* :
* : WDT_GetValue()
* :
* : WDT_TypeDef * WDTx WDT
* : int32_t
* :
******************************************************************************************************************************************/
int32_t WDT_GetValue(WDT_TypeDef * WDTx)
{
@ -102,11 +102,11 @@ int32_t WDT_GetValue(WDT_TypeDef * WDTx)
}
/******************************************************************************************************************************************
* : WDT_INTClr()
* :
* : WDT_TypeDef * WDTx WDT
* :
* :
* : WDT_INTClr()
* :
* : WDT_TypeDef * WDTx WDT
* :
* :
******************************************************************************************************************************************/
void WDT_INTClr(WDT_TypeDef * WDTx)
{
@ -114,11 +114,11 @@ void WDT_INTClr(WDT_TypeDef * WDTx)
}
/******************************************************************************************************************************************
* : WDT_INTStat()
* :
* : WDT_TypeDef * WDTx WDT
* : int32_t 1 0
* :
* : WDT_INTStat()
* :
* : WDT_TypeDef * WDTx WDT
* : int32_t 1 0
* :
******************************************************************************************************************************************/
uint32_t WDT_INTStat(WDT_TypeDef * WDTx)
{

View File

@ -4,16 +4,16 @@
#define WDT_MODE_RESET 0
#define WDT_MODE_INTERRUPT 1
void WDT_Init(WDT_TypeDef * WDTx, uint32_t peroid, uint32_t mode); //WDT看门狗初始化
void WDT_Start(WDT_TypeDef * WDTx); //启动指定WDT开始倒计时
void WDT_Stop(WDT_TypeDef * WDTx); //关闭指定WDT停止倒计时
void WDT_Init(WDT_TypeDef * WDTx, uint32_t peroid, uint32_t mode); //WDT看门狗初始化
void WDT_Start(WDT_TypeDef * WDTx); //启动指定WDT开始倒计时
void WDT_Stop(WDT_TypeDef * WDTx); //关闭指定WDT停止倒计时
void WDT_Feed(WDT_TypeDef * WDTx); //喂狗,重新从装载值开始倒计时
void WDT_Feed(WDT_TypeDef * WDTx); //喂狗,重新从装载值开始倒计时
int32_t WDT_GetValue(WDT_TypeDef * WDTx); //获取指定看门狗定时器的当前倒计时值
int32_t WDT_GetValue(WDT_TypeDef * WDTx); //获取指定看门狗定时器的当前倒计时值
void WDT_INTClr(WDT_TypeDef * WDTx); //中断标志清除
uint32_t WDT_INTStat(WDT_TypeDef * WDTx); //中断状态查询
void WDT_INTClr(WDT_TypeDef * WDTx); //中断标志清除
uint32_t WDT_INTStat(WDT_TypeDef * WDTx); //中断状态查询
#endif //__SWM320_WDT_H__