TM4C123G学习记录(1)--时钟

  • 为了准备电赛临时学一下TM4C123G,简单记录学习内容
  • 大家可以在这里下载我收集的资源,非常全面,花了很大功夫收集来的,还有书籍、例程代码等
  • 还可以在TI官网下载相关文档TI官网

一、基础时钟源

TM4C123内部共有4个时钟源,见下表

时钟简介
内部高精度振荡器(PIOSC)内部振荡器,其频率为16MHz,精度为1%,可以用来驱动PLL
主振荡器 (MOSC)外部高速振荡器,频率可在4-25M间选择,可以驱动PLL(此时频率在5-25M)
低频内部振荡器 (LFIOSC)适用于深度睡眠省电模式,它的频率是会改变的,范围在10KHz-90KHz之间,标准值30KHz
休眠模块时钟源32.768KHz晶振,用于实时时钟源或睡眠时钟

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、时钟树

TM4C123的时钟树如下
在这里插入图片描述
从时钟树上可以看到4个时钟源和各模块时钟的连接情况,注意

  1. MOSC和PIOSC可以用来驱动PLL
  2. PLL输出锁定在400MHz,它可以在经过二分频和SYSDIV分频(这个可以程序配置)后提供系统时钟。注意TM4C123G的最大主频为80MHz,因此配置时钟的时候,若使用的PLL,最小分频数只能是2.5分频

三、时钟配置

1、库函数

使用函数 void SysCtlClockSet(uint32_t ui32Config); 进行系统时钟设置
这个函数参数是4个部分做按位与,包括

  1. 时钟分频SYSDIV设置
		#define SYSCTL_SYSDIV_1         0x07800000  // Processor clock is osc/pll /1
		#define SYSCTL_SYSDIV_2         0x00C00000  // Processor clock is osc/pll /2
		...
		#define SYSCTL_SYSDIV_62        0x9EC00000  // Processor clock is osc/pll /62
		#define SYSCTL_SYSDIV_63        0x9F400000  // Processor clock is osc/pll /63
		#define SYSCTL_SYSDIV_64        0x9FC00000  // Processor clock is osc/pll /64
		#define SYSCTL_SYSDIV_2_5       0xC1000000  // Processor clock is pll / 2.5
		#define SYSCTL_SYSDIV_3_5       0xC1800000  // Processor clock is pll / 3.5
		#define SYSCTL_SYSDIV_4_5       0xC2000000  // Processor clock is pll / 4.5
		...
		#define SYSCTL_SYSDIV_61_5      0xDE800000  // Processor clock is pll / 61.5
		#define SYSCTL_SYSDIV_62_5      0xDF000000  // Processor clock is pll / 62.5
		#define SYSCTL_SYSDIV_63_5      0xDF800000  // Processor clock is pll / 63.

  1. 系统时钟来源(直接用振荡器,还是用PLL倍频过的)
		#define SYSCTL_USE_PLL          0x00000000  // System clock is the PLL clock
		#define SYSCTL_USE_OSC          0x00003800  // System clock is the osc clock
  1. 时钟源选择(对应上面的表2.4)
		#define SYSCTL_OSC_MAIN         0x00000000  // Osc source is main osc
		#define SYSCTL_OSC_INT          0x00000010  // Osc source is int. osc
		#define SYSCTL_OSC_INT4         0x00000020  // Osc source is int. osc /4
		#define SYSCTL_OSC_INT30        0x00000030  // Osc source is int. 30 KHz
		#define SYSCTL_OSC_EXT32        0x80000038  // Osc source is ext. 32 KHz
  1. 外接晶体频率
		#define SYSCTL_XTAL_1MHZ        0x00000000  // External crystal is 1MHz
		#define SYSCTL_XTAL_1_84MHZ     0x00000040  // External crystal is 1.8432MHz
		#define SYSCTL_XTAL_2MHZ        0x00000080  // External crystal is 2MHz
		#define SYSCTL_XTAL_2_45MHZ     0x000000C0  // External crystal is 2.4576MHz
		#define SYSCTL_XTAL_3_57MHZ     0x00000100  // External crystal is 3.579545MHz
		...
		#define SYSCTL_XTAL_24MHZ       0x00000640  // External crystal is 24.0 MHz
		#define SYSCTL_XTAL_25MHZ       0x00000680  // External crystal is 25.0 MHz

2、配置示例

/* MOSC频率16M,SYSDIV5分频,系统时钟源自PLL锁相环倍频,时钟源使用MOSC */
/* 系统时钟频率400M/2/5=40M */
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_XTAL_16MHZ|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN);	

/* MOSC频率16M,SYSDIV2.5分频,系统时钟源自PLL锁相环倍频,时钟源使用MOSC */
/* 系统时钟频率400M/2/2.5=80M , 注意这是上限了*/
SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);

/* MOSC频率16M,SYSDIV不分频,系统时钟来自时钟源,时钟源使用MOSC */
/* 系统时钟频率16M/1=16M */
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);

四、延时函数

1、库函数

TM4C库提供了一个延时函数,它利用汇编,提供了跨越工具链时恒定的延迟。延时3*ui32Count个时钟周期

__asm void SysCtlDelay(uint32_t ui32Count)

但若系统时钟频率不同,一个时钟周期的长度也不同,一旦改了系统时钟频率,延时就会变化,如何改进?

2、改进的延时函数

(1)利用以下函数获取系统时钟频率(单位Hz)

		uint32_t SysCtlClockGet(void)

(2)改进延时函数

  • 假设系统时钟频率为nHz,即(n/1000)KHz,设cnt=(n/1000),每秒有1000cnt个周期,每个cnt长1ms。
    SysCtlDelay(Count)可以延时3
    Count个周期,令Count=cnt/3,即可延时1个cnt长(即1ms)
		//延时n毫秒,不用考虑时钟频率
		#define delay_ms(n); SysCtlDelay(n*(SysCtlClockGet()/3000));

但是要注意:

  • 不管用哪个时钟源,只要工作频率高于40MHz,就会导致实际延时时间大于设置值。原因好像是芯片内部Flash的读取频率最大只能达到40M,
  • 当工作频率大于40MHz时,通过预取两个字的指令来达到80M的运行主频。但是,当遇到SysCtlDelay函数这种短跳转时这个特性并不能很好的工作,每次都需要读取指令,所以时间就延长了
  • 也就是说如果主频大于40M,SysCtlDelay(n*(SysCtlClockGet()/3000))这个方法也不是很准,可以考虑用ROM_SysCtlDelasy()
  • 44
    点赞
  • 151
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
TM4C123G是德州仪器(Texas Instruments)公司推出的一款高性能、低功耗的单片机产品。它采用ARM Cortex-M4内核,具有丰富的外设和强大的计算能力,广泛应用于工业控制、自动化、嵌入式系统等领域。 TM4C123G的中文资料包括技术手册、参考手册、用户指南等。技术手册详细介绍了芯片的架构、功能模块、时钟系统、内存管理、中断控制等核心信息,对于深入理解芯片的内部工作原理非常有帮助。参考手册提供了大量的例程和代码示例,可以快速入门并掌握芯片的基本编程方法。用户指南则是对产品的整体介绍和使用说明,包括软件开发工具的使用、外设配置和调试技巧等。 TM4C123G的中文资料还包括应用笔记和数据手册。应用笔记以具体的应用场景为出发点,通过示例、实验和案例分析,介绍了如何使用TM4C123G来解决特定问题,帮助开发者快速上手。数据手册列举了芯片的详细电气特性、引脚定义、引脚功能和时序要求等信息,对于硬件设计者来说是必备的参考资料。 除了官方提供的中文资料,还有一些社区和论坛上有关TM4C123G的中文教程和资料。这些教程和资料通常由开发者或爱好者自发分享,包括使用案例、开发经验、技巧和小窍门等,对初学者学习和使用TM4C123G具有很大的帮助。 总之,TM4C123G的中文资料提供了丰富的信息和指导,对于学习和应用该款单片机产品非常有帮助。无论是初学者还是有经验的开发者,都可以通过这些资料加快开发进度、提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云端FFF

所有博文免费阅读,求打赏鼓励~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值