- /*********************************************************************************************
- * 菜农新唐M0助学交流(Q群:12047788)
- * 模块名称:定时器中断的使用
- * 创建时间:2011-10-20
- * 所属公司 : 火星菜农集团
- * 文件名称: Main.c
- * 作者 : 周炳权
- * 功能描述: 按KEY2进入中断驱动蜂鸣器;按KEY2进入,点亮流水灯驱动蜂鸣器。
- 定时器0关蜂鸣器(500ms)
- *----------------------------------------------------------------
- 修改记录:
- 修改日期:
- 修改人:
- **********************************************************************************************************/
- #include <stdio.h>
- #include "NUC1xx.h"
- #include "DrvGPIO.h"
- #include "DrvSYS.h"
- #include "DrvTIMER.h"
- #include "DrvADC.h"
- #include "DrvUART.h"
- uint32_t uTimerEventNo[4];
- /********************************************************************
- *@作者:周炳权
- *@功能:外部中断0回调函数
- *
- *@输入: NONE
- *@输出: NONE
- ********************************************************************/
- void EINT0CALLBACK( void )
- {
- DrvGPIO_SetBit( E_GPB, 10);
- return;
- }
- /********************************************************************
- *@作者:周炳权
- *@功能:外部中断0回调函数
- *
- *@输入: NONE
- *@输出: NONE
- ********************************************************************/
- void TMR0_Callback( void )
- {
-
- DrvGPIO_ClrBit( E_GPB, 10);
- return;
- }
- /********************************************************************
- *@作者:周炳权
- *@功能:流水灯函数
- *
- *@输入: NONE
- *@输出: NONE
- ********************************************************************/
- void LED_Gilde( void )
- {
- DrvGPIO_ClrBit( E_GPA, 2);
- DrvSYS_Delay(50000);
- DrvGPIO_SetBit( E_GPA, 2);
- DrvSYS_Delay(50000);
- DrvGPIO_ClrBit( E_GPA, 3);
- DrvSYS_Delay(50000);
- DrvGPIO_SetBit( E_GPA, 3);
- DrvSYS_Delay(50000);
- DrvGPIO_ClrBit( E_GPA, 4);
- DrvSYS_Delay(50000);
- DrvGPIO_SetBit( E_GPA, 4);
- DrvSYS_Delay(50000);
- DrvGPIO_ClrBit( E_GPA, 5);
- DrvSYS_Delay(50000);
- DrvGPIO_SetBit( E_GPA, 5);
- DrvSYS_Delay(50000);
- DrvGPIO_SetBit( E_GPB, 10);
- return;
- }
- /********************************************************************
- *@作者:周炳权
- *@功能:系统初始化函数
- *
- *@输入: NONE
- *@输出: NONE
- ********************************************************************/
- void SYS_Init( void )
- {
- UNLOCKREG(x); /*芯片注册解锁*/
- SYSCLK->PWRCON.XTL12M_EN =1; /*设定12M外部晶振*/
- // LOCKREG(x); /*芯片上锁*/
- DrvSYS_Delay(5000); /*等待时钟就绪*/
- DrvTIMER_Init(); /*初始化定时器*/
- DrvSYS_SelectIPClockSource(E_SYS_TMR0_CLKSRC, 0); /*选择定时器时钟源为外部12MHz*/
- DrvSYS_SelectIPClockSource(E_SYS_TMR1_CLKSRC, 0);
- DrvSYS_SelectIPClockSource(E_SYS_TMR2_CLKSRC, 0);
- DrvSYS_SelectIPClockSource(E_SYS_TMR3_CLKSRC, 0);
- DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT);/*设置端口GPA2为输出模式*/
- DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT);/*设置端口GPA3为输出模式*/
- DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT);/*设置端口GPA4为输出模式*/
- DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT);/*设置端口GPA5为输出模式*/
- DrvGPIO_Open( E_GPB, 15, E_IO_INPUT);/*设置端口GPB15为输入模式*/
- DrvGPIO_Open( E_GPB, 14, E_IO_INPUT);/*设置端口GPB14为输入模式*/
- DrvGPIO_Open( E_GPB, 10, E_IO_OUTPUT);/*设置端口GPB10为输出模式*/
- DrvGPIO_ClrBit( E_GPB, 10); /*禁止蜂鸣器工作*/
- DrvGPIO_EnableInt( E_GPB, 14, E_IO_FALLING, E_MODE_EDGE); /*设置端口GPB14为外部中断模式*/
- DrvGPIO_SetDebounceTime(10, E_DBCLKSRC_10K);
- DrvGPIO_EnableDebounce(E_GPB, 14);
- DrvGPIO_InitFunction( E_FUNC_EXTINT0); /*指定外部中断0引脚功能*/
- DrvGPIO_EnableEINT0( E_IO_FALLING, E_MODE_EDGE, EINT0CALLBACK);
- DrvTIMER_Open(E_TMR0, 2, E_PERIODIC_MODE); /*500ms,周期模式*/
- uTimerEventNo[0] = DrvTIMER_SetTimerEvent(E_TMR0, 2, (TIMER_CALLBACK)TMR0_Callback, 0); /*设置定时处理事件*/
- DrvTIMER_EnableInt(E_TMR0); /*使能定时器0中断*/
- DrvTIMER_Start(E_TMR0); /*开始计数*/
- return;
- }
- /********************************************************************
- *@作者:周炳权
- *@功能:ADC初始化函数
- *
- *@输入: NONE
- *@输出: NONE
- ********************************************************************/
- void ADC_Init( void )
- {
- DrvGPIO_InitFunction( E_FUNC_ADC1 ); /*初始化ADC1功能*/
- DrvADC_Open( ADC_SINGLE_END, ADC_CONTINUOUS_OP,
- 0x02, EXTERNAL_12MHZ, 5); /*使能ADC功能并完成相关设定*/
- return;
- }
- /********************************************************************
- *@作者:周炳权
- *@功能:ADC初始化函数
- *
- *@输入: NONE
- *@输出: NONE
- ********************************************************************/
- void UART_Init( void )
- {
- STR_UART_T param;
-
- DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0); // enable the UART`s clock
- DrvGPIO_InitFunction(E_FUNC_UART0); // set the multiplex pin to UART
-
- param.u32BaudRate = 115200; // baud rate
- param.u8cDataBits = DRVUART_DATABITS_8; // data bit
- param.u8cStopBits = DRVUART_STOPBITS_1; // stop bit
- param.u8cParity = DRVUART_PARITY_NONE; // test bit
- param.u8cRxTriggerLevel = DRVUART_FIFO_1BYTES; // depth of FIFO`s store
- param.u8TimeOut = 0; // FIFO time-over setting
- DrvUART_Open(UART_PORT0, ¶m); // open the UART
- return;
- }
- /********************************************************************
- *@作者:周炳权
- *@功能:主函数
- *
- *@输入: NONE
- *@输出: NONE
- ********************************************************************/
- void ADC_OUTPUT_Display( uint32_t r_adc_data )
- {
- uint8_t Display_Buffer[] = "当前电压:0.00V\r\n";
- r_adc_data = r_adc_data * 330 / 4095; //system supply 3.3V, and the precision is 12 bits.
- Display_Buffer[9] = r_adc_data / 100 + '0';
- Display_Buffer[11] = r_adc_data / 10 % 10+'0';
- Display_Buffer[12] = r_adc_data % 10 + '0';
- DrvUART_Write(UART_PORT0, Display_Buffer, 18);//真实串口输出数据
- printf(Display_Buffer);//半主机调试信息输出
- }
- /********************************************************************
- *@作者:周炳权
- *@功能:主函数
- *
- *@输入: NONE
- *@输出: NONE
- ********************************************************************/
- int main( void )
- {
- SYS_Init();
- ADC_Init();
- UART_Init();
- DrvADC_StartConvert();
- printf("\n\r\n\r");
- printf("************************************\n\r");
- printf(" 菜农新唐M0助学交流学习笔记 \n\r");
- printf(" 学习笔记4:半主机调试ADC \n\r");
- printf(" 愛新覺羅 權-->21icID:564451696 \n\r");
- printf(" ("__DATE__" -- "__TIME__") \n\r");
- printf("************************************\n\r");
- while(1)
- {
- if(DrvGPIO_GetBit( E_GPB, 15) == 0)
- {
- LED_Gilde();
- }
-
- ADC_OUTPUT_Display( DrvADC_GetConversionData(1) );
- DrvSYS_Delay( 500000 );
- }
- }