嵌入式作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.分析归纳TPM、PIT、LPTMR、RTC各定时器模块的功能及应用场合,列表说明。
2.编写DAC模块程序,分别配置缓冲区操作模式为缓冲区正常模式和缓冲区单次扫描模
式,完成三角波发生器功能。
// DAC驱动程序
typedef struct
{
DACx dacx; // 配置DAC模块号
DAC_MemMapPtr DACx_Base_Ptr; // 选择DAC通道号
unit8_t Water_Mark_Mode; // 选择水印模式的数字
unit8_t Buffer_Enable; // 配置buffer缓冲区使能
unit8_t Buffer_Mode; // 配置buffer缓冲区的模式
unit8_t Triger_Mode; // 配置触发器模式
unit8_t Buffer_Init_Pos; // 配置buffer缓存区的起始位置
unit8_t Buffer_Up_Limit; // 配置buffer缓冲区的最大长度
unit8_t DAC_irqc; // 选择DAC中断模块
DAC_ISR_CALLBACK isr_func; // 设置回掉函数
}LPLD_DAC_Cfg_t;
// 对DAC_Config进行默认配置
unit8_t LPLD_DAC_Init(LPLD_DAC_Cfg_t *DAC_Config)
{
// 水印模式的字数默认为一个字节
if(DAC_Config -> Water_Mark_Mode == NULL)
DAC_Config -> Water_Mark_Mode = WATER_MODE_1WORD;
// 缓冲区使能默认为禁用缓冲区
// 缓冲区模式默认为正常模式
DAC_Config -> Buffer_Mode =
// 触发模式默认为无触发模式
if(DAC_Config -> Triger_Mode == NULL)
DAC_Config -> Triger_Mode = TRIFER_MODE_NONE;
// 缓冲区的起始位置默认为0
if(DAC_Config -> Buffer_Init_Pos == NULL)
DAC_Config -> Buffer_Init_Pos = 0;
// 缓冲区的最大值为16
if(DAC_Config -> Buffer_UP_Limit == NULL)
DAC_Config -> Buffer_Up_Limit = 15;
// 中断方式默认为不开中断
if(DAC_Config -> DAC_irqc ==NULL)
DAC_Config -> DAC_irqc = 0;
// 配置DMA寄存器
return LPLD_DAC_Config(DAC_Config);
}
// 设置DAC通道的缓冲区数据
void LPLD_DAC_Set_Buffer(DACx dacx,unit8 DACx_DATn,unit16 data16) {
// 配置端口基地址
DAC_MemMapPtr dacptr = DAC_Ptr[dacx];
// 配置DAC缓存区地址好
DAC_DALT_REG(dacptr,DACx_DATn) = (data16 &0x0ff);
// 配置相应缓冲区的数据
DAC_DATH_REG(dacptr,DACx_DATn) = (data16 &0xf00)>>8;
}
// 定义初始化结构体
LPLD_DAC_Cfg_t dac_config;
// 三角波函数
void main (void)
{
int i=0,j;
char delta=1;
// 选择DAC0,DAC0引脚输出
dac_config.DACx_Base_Ptr = DAC0_BASE_PTR;
LPLD_DAC_Init(&dac_config);
while(1)
{
if(i==0)
delta=1;
else if(i==4095)
delta=1;
i+=delta;
LPLD_DAC_Set_Buffer(DAC0,0,i);
for(j=0;j<10;i++)
}
// 上述代码决定每次循环的输出值是增还是减,因为我们要输出三角波,因// 此不管波形的增加还是减小,它都是线性变化的,当到达底部后,让每次// 变化为递增DELTA,当达到顶部后,让每次变化为递减DELTA,这个DELTA // 值默认设置为1
}
3.从从机的接入、时钟控制、数据传输速度、是否可以实现多主控、作用领域等方面比较
SPI和I2C。
4. 谈谈学习该门课程的收获与体会。
通过一学期嵌入式基础知识的学习和实践,我对嵌入式系统有了一定的了解。
嵌入式系统大体上是指带有微处理器的专用软硬件系统,他们具有自己的操作系统,能实现具体的功能。嵌入式系统有四个层次:功能层、软件层、中间层、硬件层。
不同层次分别包含了不同的模块:
功能层:应用程序
软件层:文件系统、图形用户接口、任务管理、实时操作系统
中间层:硬件抽象层、极板支持包
硬件层:嵌入式微处理器、各类接口
不过在课程中仅仅掌握理论知识是远远不够的,所以最后三周的实践课给了我们很好的实践机会,让我们将理论付诸于实际,最终在开发板上实现呼吸灯的转换,键盘输入/输出以及传感器数据的采集。在使用KL25嵌入式开发板做工程的时候,我发现C语言尤为重要,不论是做嵌入式软件开发还是硬件开发,C语言都是格外有用的工具。接着,我们应该对操作系统有详尽的了解,这让我们懂得软件是如何支配硬件执行命令的,例如操作系统的进程、线程、操作系统分配资源的方式、操作系统管理硬件的方式。最后们我们还需要细细学习ARM 系列的嵌入式系统,深入理解ARM的含义,只有这样才能算得上初步掌握嵌入式的含义。
在学习嵌入式系统的课程中,我发现C语言,数据结构,操作系统和硬件组成原理等几门课程对嵌入式的学习都有相当大的帮助,于是在看书过程中,遇到的无法理解的时序和接口的问题,我就翻出以前的书籍查询,或是在网络上搜索相关的工程案例,这对我学习嵌入式系统来说有相当大的帮助。
近年来,嵌入式作为一个热门行业备受关注,我们也应该好好学习嵌入式的知识。
综上所述,我认为学习嵌入式系统需要把握好下述两个方面:
1.把握通用知识与芯片相关知识之间的平衡
即理解芯片应用的设计,理解与芯片功能相关的知识,将理论化为应用;
2.把握硬件与软件之间的关系
嵌入式系统是软硬结合一体的工程,两者不可相互分割,必须结合在一起学习。