【发布时间】:2014-06-28 19:22:35
【问题描述】:
我的 C 很生锈,但我想知道我是否在正确的轨道上理解以下语法。(这是在 io 头文件中)
#define TCC0 (*(TC0_t*) 0x8000)
TCC0 TC0_t
[ • ] --→ [ • ] --→ [xxxx xxx] 0x8000
- [ • ] = 指针
-
TC0_t 是一个结构体,这里基本上是结构体定义的样子。
typedef struct TC0_struct { ... }TC0_t;
所以我的假设是 TCC0 指向一个结构指针,该指针指向与我的微控制器上的定时器寄存器相对应的内存地址。
如果这是真的,如果我想为多个计时器创建自己的结构,myTimer 结构看起来像
typedef struct myTimer
{
TC0_t *timer;
//other useful stuff
}myTimer;
myTimer Xtimer;
xtimer.timer = TCD0;
谢谢。
编辑:
所以 holt 建议在 myTimer 中添加更多内容。本质上,我会有不同的计时器对应于不同的端口,这将在 io 头文件中
#define TCC0 (*(TC0_t*) 0x8000)
#define TCD0 (*(TC0_t*) 0x9000)
我想创建一个结构,让我可以轻松地循环通过计时器,类似于循环通过任务列表中的任务。我可能想多了。
【问题讨论】:
-
我使用的是 Xmega32C4,你说得对,我少了一个括号。
-
我不确定你是否已经检查过这个,或者它是否有帮助,但这里是atmel application note on using xmega timer/counters。你用定时器做什么?定期执行代码?看起来单个计时器(硬件,例如 TCx0)可以有多个“通道”用于相关功能。
-
.... 还是硬件的外部信号?进一步阅读......看起来有2个定时器Timer0和Timer1可以映射到4个端口[D-F]。 TCC0 对应于端口 C 上的 Timer0。试图围绕您要实现的目标展开我的头脑。
-
我正在尝试循环使用定时器,以获得电容式传感器滑块开关。我知道那里有图书馆,但我很固执。无论如何,我希望能够循环通过计时器,一次打开一个。每个定时器都将连接到一个 ISR,该 ISR 将切换一个引脚。
-
xmega d4 datasheet(第 54 页)的一个注释看起来应该分别是 TCC0 和 TCD0 的 0x0800 和 0x0900。此外,第 51 页上有一个有趣的注释(端口 C 备用功能)——看起来将 TC0 配置为 TC2 可以允许端口 C 的所有 8 个引脚用作 PWM 输出。不一定对循环有用,但在那个页面上看起来单个计时器可以控制 4 个引脚(可能不是异步的)。
标签: c pointers syntax microcontroller