搜索
bottom↓
回复: 4

初学PSOC遇到了问题

[复制链接]

出0入0汤圆

发表于 2009-3-14 23:38:34 | 显示全部楼层 |阅读模式
我现在在初学PSOC,但是遇到了问题。
用定时器Terminalcountout中断控制  一个发光二极管每一秒钟闪烁一次,但是程序下进后二极管一直亮着,是不是没有响应中断啊?
我的程序代码:
#include <m8c.h>        // part specific constants and macros
#include "PSoCAPI.h"    // PSoC API definitions for all User Modules
#pragma interrupt_handler Timer8_ISR_C
/*
extern void Timer8_EnableInt(void);
extern void Timer8_DisableInt(void);
extern void Timer8_Start(void);
extern void Timer8_Stop(void);
extern BYTE Timer8_bReadTimer(void);
extern BYTE Timer8_bReadTimerSaveCV(void);
extern void Timer8_WritePeriod(BYTE bPeriod);
extern BYTE Timer8_bReadCompareValue(void);
extern void Timer8_WriteCompareValue(BYTE bCompareValue);

*/

void main()
{
    // Insert your main routine code here.
        //Timer8_WritePeriod(183);
        M8C_EnableGInt;
        Timer8_EnableInt();
        Timer8_Start();
       

        while(1);
       
}

void Timer8_ISR_C()
{
   
    PRT0DR^ =0x02;
}
芯片配置
Global Resources
CPU_Clock =12 MHz
VC1 =16             Divide 24 MHz SysClock by 16.
VC2 =16             Divide VC1 by 16.
VC3 Source =VC2     Set the source for VC3 as VC2.
VC3 Divider =256    Divide VC2 by 256 (to produce a 366 Hz clock)
User Module Parameters
   Timer8_1   Clock =VC3              Input 366 Hz clock from VC3.
   Capture =Low Not used.
   TerminalCountOut =Row_0_Output_0    For routing to Pin2[3].
   CompareOut =None                    Not used.
   Period =182                         Set to 182 and count down.
   Compare Value =0                    Not used.
   Compare Type  =Less Than            Not used.
   Interrupt Type =Terminal Count      To generate interrupt after the down counter reaches 0.
   Clock Sync =Sync                    To SysClk Synchronize to system clock.
   TC_PulseWidth =Full width           Generate a full pulse width at every terminal count. InvertCapture =Normal Not used.
   那个中断服务程序的框架在硬件配置好后Designer会自动生成吗?我没有看到框架生成,是不是构建Project的时候出了问题才这样的

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2009-3-15 15:11:01 | 显示全部楼层
你如果使用T8用户模块配置的,请使用它提供应用函数。

如果你要自己写中断,还是比较麻烦的。可以讲这已经属于中高级的使用了。

出0入0汤圆

 楼主| 发表于 2009-3-17 09:08:32 | 显示全部楼层
上面的问题我解决了,我在timer8的中断汇编程序中加了一句
ljmp Timer8_ISR_C
就好了

出0入0汤圆

发表于 2009-3-17 10:49:42 | 显示全部楼层
可以的。但要注意所加LJMP的位置。

如果在代码中不使用T8提供的函数,就要加在最开始处。
如果在代码中还要使用T8提供的函数,就只能加在最后面的中断返回前的位置,但这样可能会对T8函数的精度有影响(如果你的中断代码太多的话)

另外的方法是直接修改boot.tpl文件中相对应的地方,原理是相同的,就是把中断直接转移到自己的中断中。但此时T8的函数全部不能使用。下面是我改Sleep Timer 中断直接到自己中断的例子:

在boot.tpl文件中找到Sleep Timer的定位 org 64h处,将原来的`@INTERRUPT_25注销掉,加上转移指令。

    org   64h                      ;Sleep Timer Interrupt Vector
    ;`@INTERRUPT_25`
    ljmp _isr_sleeptimer
    reti

如果对定时要求不高,只是产生一个简单的比较粗的时间定时的话,可以先考虑是否可以直接使用系统资源的Sleep Timer,而不使用T8。这样可以节省一个数字模块资源,做它用。这样才能充分发挥PSoC的特点。


做这些改动,要概念清楚,具备比较好的汇编的基础(不是说一定非常了解PSoC的汇编),知道汇编、中断、C代码中断的编写方法,以及它们之间的关系等等。所以我说“属于中高级的使用”。

尽管LZ说自己初学PSoC,但我觉的LZ应该是具备比较深厚其它8位或32位的功底的。你会很快成为PSoC高手的。
头像被屏蔽

出0入0汤圆

发表于 2009-7-28 23:21:30 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 11:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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