作者 主题:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么? (Read 2566 times)

0位成员和1位访客正在查看此主题。

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下问题上回复#50: 2020年12月3日,下午09:09:59»
我做了一个新项目,并修改了一部分示例代码,使其正常工作,现在一切都很好。  :phew:
因为我不'我不知道如何正确地在裸机上进行编码,我在很大程度上依赖于Start.Atmel,在这种情况下,它似乎浪费了很多时间。
现在,我生成了相同的项目,但没有在TCC0上设置PWM,而是将PA10设置为函数F,并使用了裸机示例函数来设置TCC0,并使所有功能正常工作。  :-+

« 最后编辑:2020年12月3日,09:15:09 pm by Refrigerator »
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#51: 2020年12月3日,晚上10:55:51»
好吧,我以为我很清楚,但是当我设置DMA将单个字节发送给CCB [2]时,它没有'工作,进入了可怕的假人处理程序。
甚至在DMA处于SW中时仅向CCB [2]写入时,触发器也是如此。
但是,当我将地址更改为某个虚拟变量时,它可以正常工作,因此通过DMA写入CCB [2]是我的下一个障碍。
检查了数据表并且没有'立即发现有关将DMA写入CCB寄存器的任何特殊条件,仅此条件:
引用
PER / PERB时清除,
CCx / CCBx,PATT / PATTB
或WAVE / WAVEB寄存器是
书面。
在这一点上我'm pretty sure it'的ASF4让我再次绊倒  | O。但是反正我'我会继续尝试看看's going on exactly.
显然,通过DMA写入寄存器会产生错误。但是我仍然可以通过仅更改数据目标来检查是否从TCC0获得了DMA触发。
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 阿塔拉多夫

  • 超级贡献者
  • ***
  • 帖子:7243
  • 国家: 我们
    • 个人网站
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#52: 2020年12月3日,晚上10:58:26»
尝试先写一个单词,看看这是否是某种程度上不想接受字节写的寄存器。
亚历克斯
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#53: 2020年12月3日,下午11:00:21»
是的,如果我将DMA目标设置为某个虚拟变量,则该值将更改,并且将传输设置的数据量。
我也启用了DMA而没有触发,因此只能由TCC0触发,这一次'设置为在溢出时触发。
所以问题出在(在我使用ASF4 DMA中尝试转移到CCB [0],但出错了。
« 最后修改时间:2020年12月3日,11:01:57 pm by Refrigerator »
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 阿塔拉多夫

  • 超级贡献者
  • ***
  • 帖子:7243
  • 国家: 我们
    • 个人网站
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#54: 2020年12月3日,下午11:01:41»
如果您使用字传输而不是字节传输会怎样?
亚历克斯
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#55: 2020年12月3日,晚上11:03:58»
如果您使用字传输而不是字节传输会怎样?
我不得不用谷歌搜索一个单词有多长(16 个字节 位根据谷歌)。
I'我现在去检查。

编辑:在手表CCB [2]中显示为 uint32_t
« 最后修改时间:2020年12月3日,11:06:14 pm by Refrigerator »
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 阿塔拉多夫

  • 超级贡献者
  • ***
  • 帖子:7243
  • 国家: 我们
    • 个人网站
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#56: 2020年12月3日,晚上11:06:48»
字是32位。

从字面上看,这是BEATSIZE的设置:
0x0 BYTE 8位访问
0x1 HWORD 16位访问
0x2 WORD 32位访问

您需要以其原始大小访问寄存器。
亚历克斯
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#57: 2020年12月3日,晚上11:37:02»
将拍子大小设置为32个字节会触发DMA回调,但是该值未出现在CC [2]中,也许我的目标地址错误?
编辑:LED_data是单个uint32_t变量,但传输大小设置为1,因此应该可以。
码: [选择]
_dma_set_source_address(0, (void *)LED_data);
_dma_set_destination_address(0, (void *)TCC0->CCB[2].reg);
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 阿塔拉多夫

  • 超级贡献者
  • ***
  • 帖子:7243
  • 国家: 我们
    • 个人网站
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#58: 2020年12月3日,晚上11:50:18»
(无效*)&TCC0->CCB[2].reg
亚历克斯
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#59: 2020年12月3日,晚上11:53:38»
(无效*)&>CCB[2].reg
然后'这就是为什么我害怕裸机编码,因为我错过了像这样的明显细节。

还可以将uint8_t转换为uint32_t吗?我不'想要使我的RAM使用量增加三倍。  :o
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 阿塔拉多夫

  • 超级贡献者
  • ***
  • 帖子:7243
  • 国家: 我们
    • 个人网站
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#60: 2020年12月3日,晚上11:54:48»
您在ASF代码中错过了这一点。这与是否使用裸机无关。
亚历克斯
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#61: 2020年12月3日,晚上11:56:52»
您在ASF代码中错过了这一点。这与是否使用裸机无关。
我的意思是我(通常)错过细节,而裸机编码是一个相当详细的过程(imo)。
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#62: 2020年12月4日,上午12:50:47»
请注意,并非所有的32位都在传输,并且在 表29-6。注册摘要 该寄存器为24位,这很好。
我没有 '还没有找到一种节省空间的方法,因为现在每个LED数据位都变成一个32位字。

编辑:实际上,如果我做了一次从uint8_t到uint32_t的DMA传输,而另一次是从uint8_t到CCB的传输,那么也许。
« 最后编辑:2020年12月4日,上午12:52:29 »
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 阿塔拉多夫

  • 超级贡献者
  • ***
  • 帖子:7243
  • 国家: 我们
    • 个人网站
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#63: 2020年12月4日,上午12:52:53»
因此,如果您使用正确的寄存器地址,但是执行字节传输,则不起作用?

如果您执行手动编写,它会做什么?
码: [选择]
*((uint8_t *)&TCC0->CCB[2].reg) = 123;

还是直接CC?
码: [选择]
*((uint8_t *)&TCC0->CC[2].reg) = 123;

如果此手动代码不起作用,那么您将无能为力,这些寄存器需要写一个字。

这样链接DMA传输极不可能。触发所有这些将是一场噩梦。
亚历克斯
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#64: 2020年12月4日,上午01:04:51»
8位传输有效,多个8位传输也有效  :phew: :phew: :phew: :phew:

我想我've清除了足够的障碍,终于可以继续我的程序了(敲木头)。
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#65: 2020年12月4日上午02:00:15»
正要去睡觉,因为它'将近凌晨4点,但无法'不能确保我可以发送数据。
并猜测它最终将如何工作。
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#66: 2020年12月4日,上午02:23:42»
LED's work but they'有时会出现小故障。
第一个LED总是设置错误的颜色,这很可能意味着错误的计时,因为这些LED's重塑并纠正DO的时序,因此为什么其余的都能正常工作。
我会上传一张照片,但是'这是我第四次尝试编写此消息,我希望不包括图片将使此消息出现,而不是重定向到"start new topic".
只是需要缩小尺寸。
« 最后编辑:2020年12月4日,上午02:31:14 »
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 阿塔拉多夫

  • 超级贡献者
  • ***
  • 帖子:7243
  • 国家: 我们
    • 个人网站
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#67: 2020年12月4日,上午02:27:10»
我建议以更高的时钟频率驱动TCC,以使比较值和周期值不会太低,并且您可以更好地控制。
亚历克斯
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#68: 2020年12月4日上午02:32:20»
我建议以更高的时钟频率驱动TCC,以使比较值和周期值不会太低,并且您可以更好地控制。
I'我现在仅以8MHz运行,我计划将时钟一直提高到48MHz,以加快计算速度并为我提供更好的时序。

但是我认为'令我惊奇的是,我可以重新利用硬件外设来生成自定义串行信号,否则将无法以其他任何方式实现。
« 最后编辑:2020年12月4日,上午09:19:14通过电冰箱 »
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
回复:SAMD10:设置计时器以触发每330ns(3MHz)的最佳方法是什么?
« 在以下回复#69: 2020年12月4日,下午05:58:05»
找到了故障的原因,原来是DMA'速度不够快,有时会跳过一两个节拍。
PER增至9可修复故障。
在PER = 9,CC = 3和CC =的情况下,似乎也处于8MHz 6产生完美的时机。根据WS2812-2020数据表,时序几乎是不正确的,但是根据neopixel库,它们是固定的,并且've确认arduino nano上的neopixel库与这些LED配合良好's.
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 

离线 冰箱

  • 超级贡献者
  • ***
  • 帖子:1169
  • 国家: lt
另外,前几个字节有时会丢失,所以我在前面添加了一些虚拟字节,现在一切都很好。
我认为将时钟频率提高到48MHz将解决大多数这些问题。
我有一个博客 http://brimmingideas.blogspot.com/ 。现在空空如也!
 


分享我

掘客  脸书  SlashDot  美味的  Technorati  推特  谷歌  雅虎
中频