打印
[菜农助学交流]

tendence第五帖:AD转换器(中断方式+库函数)

[复制链接]
2058|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tendence|  楼主 | 2011-11-21 20:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
折腾良久,终于完成了ADC的编程了。很是开心。
但是玩M0得暂时停下了,还得顾着点学业啊!好几次点名没到了,不能太不给老师面子啊!
话不多说,上代码
hw_config.c
 
#include "includes.h"  //包含所需的头文件
/*************************************************************************************
** Function name:       Set_System
** Descriptions:       系统
** input parameters:    无
** output parameters:   无
** Returned value:      无
*************************************************************************************/
void RCC_Configuration(void);
void GPIO_Configuration( void);
void UART_Configuration(void );
void UART_INT_HANDLE(uint32_t );
void ADC_Configuration(void);
void ADCInt(uint32_t u32UserData );
void Set_System(void)
{
  RCC_Configuration( );      //配置系统时钟
  GPIO_Configuration( );     //配置GPIO
  UART_Configuration( ); //配置UART
  ADC_Configuration( );
}
void ADC_Configuration(void)
{
   DrvADC_Open(ADC_SINGLE_END, ADC_SINGLE_OP, 2, EXTERNAL_12MHZ, 5);
   // ADC_SINGLE_END 输入模式
   //  ADC_SINGLE_OP 操作模式
   //通道1
   //外部12M晶振
   //频率12M/(5+1)
   DrvADC_EnableADCInt(ADCInt,0);
}
void ADCInt(uint32_t u32UserData )
{
float value;
value=DrvADC_GetConversionData(1);
printf("%f\n\n",value*(3.3)/(0xfff));
}
/*************************************************************************************
** Function name:       RCC_Configuration
** Descriptions:        系统时钟源设置
** input parameters:    none
** output parameters:   none
** Returned value:      none
*************************************************************************************/
void RCC_Configuration(void)
{
   UNLOCKREG();                   // 对写保护位操作时 需要一次向0x50000 0100写入 0x59,0x16,0x88,
   DrvSYS_SetOscCtrl(E_SYS_XTL12M, 1);//与其 SYSCLK->PWRCON.XTL12M_EN = 1; 等同
                                      // PWRCON寄存器(这些寄存器在上电复位到用户解锁定之前是锁定的)除了 BIT[6]位其他位都受写保护
                                   // 解除这些需要向 0x50000 0100写入 0x59,0x16,0x88              // 令PWRCON寄存器的BITP[0]为1(即设定12M外部晶振)
   delay_ms(100);                                   //while (DrvSYS_GetChipClockSourceStatus(E_SYS_XTL12M) != 1);//等待外部12MHZ晶振就绪
   LOCKREG();                   // 向“0x5000_0100”写入任何值,就可以重锁保护寄存器
}
/*************************************************************************************
** Function name:       GPIO_Configuration
** Descriptions:        端口配置
** input parameters:    none
** output parameters:   none
** Returned value:      none
*************************************************************************************/
void GPIO_Configuration()
{
  // DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT );
  // DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT );
  // DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT );
  //DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT );
  DrvGPIO_Open( E_GPA, 1, E_IO_INPUT ); //AD1
}
/*************************************************************************************
** Function name:       delay_ms
** Descriptions:        1ms(晶振为12MHZ)延时子程序
** input parameters:    count
** output parameters:   无
** Returned value:      无
*************************************************************************************/
void UART_Configuration()
{
  STR_UART_T param;
   
  DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0);    //  使能UART时钟
  DrvGPIO_InitFunction(E_FUNC_UART0);        //  复用功能引脚设置
  
     param.u32BaudRate        = 115200;        //  波特率
     param.u8cDataBits        = DRVUART_DATABITS_8;     //  数据位
     param.u8cStopBits        = DRVUART_STOPBITS_1;     //  停止位
     param.u8cParity          = DRVUART_PARITY_NONE;     //  校验位
     param.u8cRxTriggerLevel  = DRVUART_FIFO_1BYTES;     //  FIFO存储深度 1 字节
     param.u8TimeOut          = 0;         //  FIFO超时设定
     DrvUART_Open(UART_PORT0, &param);        //  串口开启、结构体整体赋值
// DrvUART_EnableInt(UART_PORT0, DRVUART_RDAINT,UART_INT_HANDLE);  //接收数据中断
                  
}
void delay_ms(uint32_t count)
{
    uint32_t i,j;
for(i=count;i>0;i--)
    for(j=2395;j>0;j--);
}

includes.h
 
#include <stdio.h>
#include "NUC1xx.h"
#include "DrvUART.h"
#include "variables.h"
#include "hw_config.h"
#include "Driver\DrvGPIO.h"
#include "Driver\DrvSYS.h"
#include "Driver\DrvADC.h"

main.c
 
#include"includes.h"

int main (void)
{
Set_System();

while(1)
{
  DrvADC_StartConvert();

  delay_ms(1000);
  
};
}

相关帖子

沙发
tendence|  楼主 | 2011-11-21 20:45 | 只看该作者
本帖最后由 tendence 于 2011-11-21 20:51 编辑


有图有真相
工程文件

ADC.rar

791.15 KB

使用特权

评论回复
板凳
tendence|  楼主 | 2011-11-21 20:50 | 只看该作者

这个RT是不是就是  MFD-103AT热敏电阻
是的话不就可以做温度测量啦?

使用特权

评论回复
地板
tendence|  楼主 | 2011-11-21 21:43 | 只看该作者
R13是多大?

使用特权

评论回复
5
mcu123AD| | 2011-11-22 12:51 | 只看该作者
R13是10K。

使用特权

评论回复
6
tendence|  楼主 | 2011-11-22 13:07 | 只看该作者
谢谢

使用特权

评论回复
7
hotpower| | 2011-11-22 13:20 | 只看该作者
他就是www.mcu123.com的站长。那里的资料众多,欢迎大家“品尝”

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:把技术记在心里

1

主题

164

帖子

0

粉丝