📄 main.c
字号:
#include "systemInit.h"
#include "uartGetPut.h"
#include <hw_flash.h>
#include <flash.h>
#include <stdio.h>
#include <adc.h>
// 定义Flash扇区号(每个扇区1024字节)
#define SECTION 62
//ADC的定义
#define ADCSequEnable ADCSequenceEnable
#define ADCSequDisable ADCSequenceDisable
#define ADCSequConfig ADCSequenceConfigure
#define ADCSequStepConfig ADCSequenceStepConfigure
#define ADCSequDataGet ADCSequenceDataGet
tBoolean ADC_EndFlag = false; // 定义ADC转换结束的标志
// ADC初始化
void adcInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_ADC); // 使能ADC模块
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); // 设置ADC采样速率
ADCSequDisable(ADC_BASE, 0); // 配置前先禁止采样序列
// 采样序列配置:ADC基址,采样序列编号,触发事件,采样优先级
ADCSequConfig(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
// 采样步进设置:ADC基址,采样序列编号,步值,通道设置
ADCSequStepConfig(ADC_BASE, 0, 0, ADC_CTL_CH0 |
ADC_CTL_END |
ADC_CTL_IE);
ADCIntEnable(ADC_BASE, 0); // 使能ADC中断
IntEnable(INT_ADC0); // 使能ADC采样序列中断
IntMasterEnable(); // 使能处理器中断
ADCSequEnable(ADC_BASE, 0); // 使能采样序列
}
// ADC采样
unsigned long adcSample(void)
{
unsigned long ulValue;
ADCProcessorTrigger(ADC_BASE, 0); // 处理器触发采样序列
while (!ADC_EndFlag); // 等待采样结束 采样结束后就执行下面的程序。
ADC_EndFlag = false; // 清除ADC采样结束标志
ADCSequDataGet(ADC_BASE, 0, &ulValue); // 读取ADC转换结果
return(ulValue);
}
// Flash读取操作
char flashRead(unsigned long ulAddress) //怎么好像只是一个数据的格式转换过程啊?、????????????????
{
char *pcData;
pcData = (char *)(ulAddress);
return(*pcData);
}
// 主函数(程序入口)
int main(void)
{
char cString[] = "Hello,world!\r\n";
unsigned long *pulData;
int i;
char c;
long size;
unsigned long ulVal;
char cBuf[30];
jtagWait(); // 防止JTAG失效,重要!
/* clockInit(); // 时钟初始化:晶振,6MHz */
clockInit(); //ADC采样需要的时钟:pll,20MHz
uartInit(); // UART初始化
adcInit();
FlashUsecSet(TheSysClock / 1000000); // 设置每微秒的CPU时钟数
ulVal=adcSample();
ulVal=(ulVal*3000)/1024;
sprintf(cBuf,"ADC0=%ld(mV)\r\n",ulVal); //将一个格式化的字符串输出到一个目的字符串
pulData = (unsigned long *)cBuf; //将数组的首地址赋给指针,然后再用来给Flash烧写。
if (FlashErase(SECTION * 1024)) //flash的擦除,擦除1KB的块。
{
uartPuts("<Erase error>\r\n");
for (;;);
}
uartPuts("<Erase ok>\r\n");
size = 4 * (1 + sizeof(cBuf) / 4); //要烧写的字节数。
if (FlashProgram(pulData, SECTION * 1024, size)) //Flash的编程,将数据写到FLASH里面,编程的起始地址是SECTION * 1024
//这里的pulData是指向数组缓冲区的指针。
{ uartPuts("<Program error>\r\n"); //烧写不成功会返回-1
for (;;);
}
uartPuts("<Program ok>\r\n");
for (i = 0; i < sizeof(cBuf); i++) //FLASH读取数据
{
c = flashRead(SECTION * 1024 + i);
if (c != '\0')
uartPutc(c);
else
break;
}
uartPuts("<Read ok>\r\n");
for (;;)
{
}
}
// ADC采样序列0的中断
void ADC_Sequence_0_ISR(void)
{
unsigned long ulStatus;
ulStatus = ADCIntStatus(ADC_BASE, 0, true); // 读取中断状态
ADCIntClear(ADC_BASE, 0); // 清除中断状态,重要
if (ulStatus != 0) // 如果中断状态有效
{
ADC_EndFlag = true; // 置位ADC采样结束标志
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -