发 帖  
原厂入驻New
申请华秋企业认证 多层板首单免费打样!
30s提交资料,10分钟通过审核(免费赔付+顺丰包邮)>>立即报名
[问答] 使用SysTick定时器和NVIC以50kHz处理中断可行吗?
422 NVIC PSoc 寄存器
分享
您好,我正在寻找帮助或建议为特定的计数任务编程PSoC4。我的当前项目是通过捕获在音频信号的一个或多个周期期间出现的1MHz时钟脉冲的数量来建立精确的音频计数器。在低频段,一个周期就足够了,但是在较高的频率下,我需要在许多周期内测量以获得准确的结果(计数为50000或更多)。我使用的是PSOC4的外部晶体以确保精度。因此,我需要两个计数器,一个捕获总计数,一个保持输入周期数的计数。不幸的是,PSoC4没有足够的逻辑资源来实现两个足够长的计数器,加上需要将计数发送给处理器的状态寄存器。因此,我想知道我是否可以利用处理器中的SyBoT定时器和/或嵌套向量中断控制器(NVIC)来直接计算周期数。它实际上需要以最大50kHz的速率捕获脉冲,并且我不确定它是否能够以这种速率处理中断。那么,可以告诉我这是否可行?如果是,我需要一些帮助来编写代码来处理中断,因为这是一个我没有经验的领域。我总是发现,执行类似任务的代码示例是最好的起点,所以如果有人指向我现有的代码示例,这将是理想的。我意识到我总是可以使用一个更大的PSoC部分,但是PSoC4就是我所拥有的,如果可能的话,我愿意坚持下去。非常感谢任何人提供的帮助。
0
2019-8-22 08:47:59   评论 分享淘帖 邀请回答

相关问题

24个回答
基本频率计数器是耦合到计数器使能/读/状态寄存器的门。
SyTobe被CPU时钟计时,所以你可以使用它来生成门。
HTTP://www. CyPress?COM/?ID=4和;RID=94607
然后使用24位UDB计数器,实用工具逻辑组件库中的20位基本计数器,或者
组合7位计数器和软件计数其溢出,因为这将相对较低。
速度。
你想要测量的范围、分辨率(我看到1兆赫)和F的准确度是多少?
问候,Dana。
2019-8-22 08:57:17 评论

举报

由于您通过引入晶体驱动时钟解决了项目的第一部分,剩下的就足够简单了。而不是计数中断驱动的单脉冲,这将消耗大量的MIPS在1兆赫,你可以使用计数器和中断时,计数器溢出。计数器、计数脉冲和计数PF周期都可以使用软件和硬件方法的组合,而不必破坏资源的可利用量。
尽管如此,您可以使用SyTalm计时器,并在计数倒计时时生成中断。查看系统参考指南(从创建者帮助菜单访问)第15章。
鲍勃
2019-8-22 09:32:38 评论

举报

当计数低频时,倒易计数器更实用。
附加信息,超过你想知道的计数器。
AN52-1时间和频率的基本原理
HTTP://www. KeVis.COM/MIN/FACET.JSPX?CC=美国& LC= En&Km=AN52-1和Sm=G
2002年时间间隔测量基础
HTTP://www. GoGoLe.COM/URL?RCCT=J&P;ESCR= S&RAMP;源=Web&CAMP;VED= 0CCAQFJAA&A;URL= HTTP%3A%2F%2FWW.LAPAPTIL.COF2FPDF %2FAN200 -3。PDF&Em=SP6PoVQHL8YFGWSLXHWWBW &;UG= AFQJCNNGBPWCSPHKOBTNTnGVSR9XOEQ和BVM=BV 82001339,D EXY SA= T
AN-200对频率计数器规范的理解
HTTP://www. GoGoLe.COM/URL?SA= T&RC==&;ErrC=S&OP;Cd=0CCFQFJAA&A;URL= HTTP %3A%2F%2FWW.LAPAPTIL.COF2FPDF %2FAN200 -4。PDF&EP=C5PVIPNSKVNV AHKGB &;UGG=AFQJCNHMLDQ5HS3SELDLD1NYRYCOQHJDW和BVM=BV 82001339,D EXY。
AN—1288计时技术
HTTP://www. GoGoLe.COM/URL?= J&P;ESCR= S&RAMP;源=0Cccqfjaa&;URL=HTTP %3A%2F%2FLATICATA.CONT%2FLITWEB%2FPDF %2F5965-7984E。PDF&EQ= PVPKYKGWGOT8YGAWA&USG=AFQJCNHD145GPHYX85 TKFPNA1HD4QUOG和BVM=BV 82001339,D Exy SA= T&RCT
问候,Dana。
2019-8-22 09:49:30 评论

举报

如果你发布一个项目档案,论坛就容易多了。
“文件”创建者
“创建工作区束”
问候,Dana。
2019-8-22 10:01:35 评论

举报

Dana
我想知道更多关于计数器。
鲍勃
2019-8-22 10:18:12 评论

举报

嗨,Dana,我怀疑只是把代码粘贴到帖子里不是做事情的正确方法。所以我道歉,我已经附加了工作区捆绑包文件。问候,肯。
FrqqMeer-0.0.CyWrk.SaveV01.Zip
1兆字节
2019-8-22 10:30:47 评论

举报

an52-1时间和频率http://www.keysight.com/main/facet.jspx基础?&CC =美国&LC =英格&K = an52-1 &SM = G an200-3基本时间间隔测量http://www.google.com/url?SA = T &RCT= J &q = &ESRC = S &源=网站&CD = 1 &VED = 0ccaqfjaa &URL = HTTP 2f 2fwww 3a % % % % %。leapsecond .com 2fpdf 2fan200-3 .pdf &EI = sp6pvoqhl8yfgwslxihwbw &USG = afqjcnerngbpwcsphkaobtnn_gvsr9xoeq &BVM = BV。82001339,d.exy an200-4了解频率计数器规格HTTP://www. GoGoLe.COM/URL?SA = T &RCT= J &q = &ESRC = S &源=网站&CD = 1,= 0ccwqfjaa &&URL = HTTP 2f 2fwww 3a % % % % %。leapsecond .com 2fpdf 2fan200-4 .pdf &EI = C5 pvpirnskvnv ahkgb &USG = afqjcnhmildqb5hs3se65ld1nrycoqhjdw &BVM =公司。82001339、计时http://www.google.com/url d.exy an-1289科学吗?SA = T &RCT= J &q = &ESRC = S &源=网站&CD = 1,= 0cccqfjaa &&URL = HTTP 2f 2fliterature 3a % % % % %。安捷伦.com 2flitweb 2fpdf 2f5965-7984e PDF & %。;EI = q5-pvpexkygwggto8ygiaw &USG = afqjcnhd145gpheyx85tkfpna1hd4qauog &容量= 82001339,d.exy BV。
2019-8-22 10:38:41 评论

举报

我想你想把这个代码移到你的while循环之外。
而{},你继续重置音轨…
全局可中断/ /允许全局中断/映射SytSISR到用户定义的ISR。/SyStKyIrqn已经定义在CIEEJCM0PSOC4.4.H文件为-1 CyIntSetSysVector((SysTykIrqn+1),KeN-ISR);SysTykSeRe= SysTykSyFig(TIKS);/ /启用具有所需的TIKE号的SyTurn定时器。在这种情况下,马克斯
在另一个主题中,考虑使用缓冲器来处理LCD显示,如果
你在一个快速循环写液晶显示器你得到“工件”在液晶显示器上,可以看起来像
废话。所以反应是拖延,所以MIPS被扔掉是没有好处的。
原因。使用缓冲区消除了这种情况。例如,你有一个2×16的显示器,所以你
设置一个2×17数组,用null填充两个行的最后一个元素。然后你想要的每一次
要写到LCD,首先检查Buff字符,以查看它是否与你相同。
想写。如果是你什么都不做。如果需要更新,则只更新字符
已经改变,然后写缓冲器输出到LCD。现在不需要延迟。
问候,Dana。
2019-8-22 10:47:29 评论

举报

嗨,Dana,鲍伯,谢谢你,你给了我很多信息,这需要一点消化——我还没看过你给柜台的所有链接。无论如何,回答你的第一个问题:范围是7Hz到100kHz。我希望在所有频率的50000的一个部分的准确性。这可能远远超出了我的模拟电路可以达到的稳定性,但我已经把它作为一个目标。一个1MHz的计数时钟将在低端给出大约143000个计数,这是可以的。在高端,我将得到每周期10个计数,所以将需要计算和5000个周期来获得我想要的分辨率。你提到一个倒数计数器对低频更实用。如果我理解正确,那就是我正在做的——我正在测量输入信号周期并转换到处理器中的频率。你们两个似乎都建议在硬件中使用少量的计数阶段,并捕获其溢出来继续在软件中计数。在我看来,这是最简单的方法,如果我理解正确,就不需要使用SyBar定时器。现在我的问题是:如何将溢出脉冲送到处理器?我认为它需要中断,所以我应该使用中断组件吗?(直到现在我只使用状态寄存器组件来捕获数据)中断组件数据表提供了一些关于编码的基本API信息,但是一个更完整的例子将非常有帮助。我已经查看了PSoC创建者起始页上的示例项目,但找不到任何显示中断的内容。不知你能否给我一个例子的链接?再次感谢。问候,肯。
2019-8-22 10:52:33 评论

举报

我已经把您建议的代码行移到while循环之外。结果与以前一样。我也尝试移动行:CyDelay(30U);//允许30MS流逝CurrnthVal**(MySys+0x00 8);/ /然后读取while循环外的SyBurk电流值寄存器。再次,结果与以前相同,CurrestyVaL显示为0。我想这与我的第一个代码类似,只是我只执行一次SyBoT操作,而不是永远重复它们。所以我希望看到CurrntayVala的非零值。您使用缓冲区来处理LCD显示的意见是正确的;我确实得到了一个垃圾质量显示,并用延迟来修复它。你的建议听起来不错,所以我现在就试试看。多谢。问候,肯。
2019-8-22 11:07:49 评论

举报

使用Syle和基本计数器设置为20位或更大,您将
不必计数侧翻脉冲来实现级联,计数器大。
足以捕获最大值。
实现ISR的两种方法,一种使用ISR组件的W/O,看看你的
组件(像计数器/计时器)ISR文件(启用中断)
在其全局属性或API调用创建此文件)中,您将看到
文件/文件顶部定义/变量声明的占位符
在ISR地方本身。将代码放在那里可以防止编译器
重写时重写该代码。
另一种方法是使用ISR组件,它创建自己的文件,或者您。
可以创建C ISR,如AP注释所示。
HTTP://www. CyPress?COM/?RID=38267 AN54060-PSoC®3、PSoC 4和PSoC 5LP中断
记住声明ISR中使用的变量变量。
HTTP://www. BARRG.P.COM/EnguldDeSts/Hoto-to/C挥发关键字
如果你声明一个值,比如全局。
UIT32 32挥发性MyFrq=0;
然后,在ISR中,它位于另一个文件中,而不是Meal.C,您
必须在该文件中声明变量为外部变量
外部UTIT32挥发性MyFrFq;
问候,Dana。
2019-8-22 11:24:06 评论

举报

我假设您想测量连续的SyTUL测量之间经过的时间。因为该代码在下面。如果问题说明了SyBLE中断,请参阅附上的项目中的注释代码。
奥迪赛1
{定义24位的SysTykxMax ValxxFFFFFF//max允许的Syle计数器值

int(){Unt3**MySys=(UINT32*)SysTykBase://指向寄存器的Sytle结构(参见CaleE.CM0.H)UINT32 SysCntVAL;//您试图检索的SyBar计数器的值为(;;){SysStKyMax Valg(SysStKyMax VALL);//重置计数器设置为最大值,1次,将不重复。AD SysSntVall=*(MySys+0x002);//记录当前值//CyDelayUS(1000);//100US:2449;1000 US:24051;CyDelay(100);//10ms:240056,100ms:2400055,必须小于SysTykxMax ValSysNtVALL=*(MySys+0x002);/ /减去先前值/ /替代方式…//SysTyksCONFIG(/SysTyksMax Valf);//设置为最大24位值,1次计数器,将不重新加载///CyDelayUS(1000);//100US:2461;1000 CyDelay:(24063);//10ms:240067,100ms:2400067,必须小于SysTykxMax Val//SysCntVals= SysTykxMax Valx *(MySys+0x002);//~67刻度误差fStAsTestFF(STRMSG1),%D\R\N“,SysCntVal”;//RePrimtKS逝去的UARTURL PATSHIPE(STRMSG1);CyDelay(50);}
SysTyk4Y01.CyWrk.SaveV01.Zip
206.3 K
2019-8-22 11:34:34 评论

举报

嗨,Dana,我用一个18位的基本计数器来计数1MHz的脉冲。这足够大了。为了计算在较高频率下的信号脉冲的数目,我认为我应该使用ISR组件来允许在软件中计数。我已经在中断上下载了App Note AN90799,这给了非常全面的指导加上例子,所以我想我应该能够从中找出做什么。谢谢你指引我到那个应用笔记。你在答复中的进一步说明是有帮助的,并且建议它不要太难。所以现在我要走了,继续下去,虽然我可能需要再回来,如果我被卡住了!再次感谢。问候,肯。
2019-8-22 11:53:51 评论

举报

再次问好,终于成功了!我已经尝试过你在上一篇文章中建议的代码,它是有效的!现在我可以通过设置从SysTykBaseBasic偏移的地址指针作为2而不是8来读取当前值寄存器的内容。这是造成所有问题的原因。但是我很困惑为什么2是偏移量,当CoeLyCM0.h文件和你以前的文章指出偏移量应该是8。下面是从CAREYCMO.H开始的代码片段,从第408行开始:/**简要结构类型来访问系统定时器(SytBar)。*/TyBuffsStruts{SysIO UIT32 32 T CTRL;/*!偏移量:0x000(R/W)SyStand控件和状态寄存器*/YixIO UIT32 32 t加载;偏移量:0x00(R/W)SyBUL重载值寄存器*/YixIO UIT32 32 t Val.;/*!偏移量:0x00 8(R/W)SyBUL电流值寄存器*/YI I uTIN 32×TILB;偏移量:0x00 C(R/)SyTube校准寄存器* /对此有何评论?多谢,肯。
2019-8-22 12:12:14 评论

举报

如果你想运行你的程序在非常高的频率,你会吃了
所有机器都是MIPS。我不能用一个固定的值说话,但是& lt;100千赫。
我认为是谨慎的。使用HW为& gt;100千赫。
问候,Dana。
2019-8-22 12:27:37 评论

举报

鉴于偏移量应该是倍数的事实,这是很奇怪的。
4从基地……因为它们都是UIT32?
问候,Dana。
2019-8-22 12:36:47 评论

举报

我的计划是先在硬件中划分几个阶段,这样用中断来计数的频率大约为1kHz(每毫秒1个脉冲)。你认为这样行吗?问候,肯。
2019-8-22 12:51:22 评论

举报

这里是主要的简化(经过一些修补)。该代码在大小/速度优化下正确运行。
奥迪赛1
{定义24位的SysTykxMax ValxxFFFFFF//max允许的Syle计数器值
UUNT32 SysNTVAL;/ /您试图检索的SyBar计数器的值
浮点x= 1.0f;//某些变量与SysTykSyFig(SysTykMax VALL)工作;//重置计数器设置为最大值,1次,不重载。
x+=(浮点)0.0001;
SysCntVal= SyStKyMax Val-(SytLo& & Gt;Valm);//获取经过的蜱(min偏移3滴答)SAMFETF(STRMSG1,“%D,%F\R\N”,SysCntVal,X);/ /报告结果UARTURL PATSHIPE(STRMSG1);
2019-8-22 13:07:07 评论

举报

您可以在这里通过“HLI”(FrqMebe捆绑)找到对等计数器的PSoC3实现:
HTTP://www. CyPress?COM/?APP =论坛和ID ID=2232和;RID=66882
PSOC5在这里:
HTTP//BLG.HEDRIKLIPKA.DE/CARIVES/2013/12/PSoCuffyNyCyTyOffy3.HTHTML
这里解释:
HTTP//BLG.HEDRIKLIPKA.DE/CARIVES/2012/04/FrqMeMeLyION.HTML
这里演示:
HTTPS://www. Youtub.com /手表?V= 4OK3SyZsZuu
奥迪赛1
2019-8-22 13:17:32 评论

举报

只有小组成员才能发言,加入小组>>

12下一页

382个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /10 下一条

快速回复 返回顶部 返回列表