企业 个人 用户名 密码   忘记密码?
站内 站外
风格设定:
论坛 博客 会展
论坛 博客 会展
 
我用C实现的5402方波程序
作者:warmfall    时间:2007-11-03    来源: 
 
      

经过几天的努力,终于使5402的XF管脚可以输出方波了。网上都是汇编程序,下面是我的C程序。利用5402的两个定时器,一个把XF拉高,一个拉低。通过中断触发。

另外,我有个问题:书上说中断函数要加interrupt声明,可是我加上后反而不好用了,不知道是怎么回事。希望和大家一起讨论一下。

头文件
/*jicunqi.h*/
/*寄存器定义*/
/*5402*/
#define IMR *(int *)0x00 /*中断屏蔽寄存器*/
#define IFR *(int *)0x01 /*中断标志寄存器*/
#define SWWSR *(int *)0x28 /*软件等待状态寄存器 */
#define PMST *(int *)0x1D /*全局控制寄存器*/
#define CLKMD *(int *)0x58 /*时钟模式寄存器*/
#define ST0 *(int *)0x06 /*状态寄存器0*/
#define ST1 *(int *)0x07 /*状态寄存器1*/
#define TIM *(int *)0x24 /*定时器寄存器*/
#define PRD *(int *)0x25 /*定时器周期寄存器*/
#define TCR *(int *)0x26 /*定时器控制寄存器*/
#define TIM1 *(int *)0x30 /*定时器寄存器*/
#define PRD1 *(int *)0x31 /*定时器周期寄存器*/
#define TCR1 *(int *)0x32 /*定时器控制寄存器*/
#define A *(int *)0x08
#define AR2 *(int *)0x12

主程序:
#include
#include "jicunqi.h"
main()
{
system_init();
timer();/*定时器初始化程序*/
while(1)
{
asm(" nop");

}
}


中断向量表:
.mmregs
.ref _TINT0_ISR
.ref _TINT1_ISR
.ref _c_int00
.sect ".vectors"
.align 0x80
RESET: B _c_int00
nop
nop
nmi:
RETE
NOP
NOP
NOP
sint17 .space 4*16
sint18 .space 4*16
sint19 .space 4*16
sint20 .space 4*16
sint21 .space 4*16
sint22 .space 4*16
sint23 .space 4*16
sint24 .space 4*16
sint25 .space 4*16
sint26 .space 4*16
sint27 .space 4*16
sint28 .space 4*16
sint29 .space 4*16
sint30 .space 4*16

INT0: RETE
NOP
NOP
NOP
INT1: RETE
NOP
NOP
NOP
INT2: RETE
NOP
NOP
NOP
TINT0: B _TINT0_ISR
NOP
NOP

BRINT0: RETE
NOP
NOP
NOP
BXINT0: RETE
NOP
NOP
NOP
SINT6: RETE
NOP
NOP
NOP
TINT1: B _TINT1_ISR
NOP
NOP
INT3: RETE
NOP
NOP
NOP
BRINT1: RETE
NOP
NOP
NOP
BXINT1: RETE
NOP
NOP
NOP
.end

cmd文件:
/* 5402.cmd */
-m map.map
MEMORY {
PAGE 0: PARAM: origin = 0x1400, len = 0x2000
VECT: origin = 0x3400, len = 0x80

PAGE 1: DARAM: origin = 0x80, len = 0x1380
}

SECTIONS {
.text :> PARAM PAGE 0
.cinit :> PARAM PAGE 0
.pinit :> PARAM PAGE 0
.vectors :> VECT PAGE 0

.stack :> DARAM PAGE 1
.bss :> DARAM PAGE 1
.data :> DARAM PAGE 1
.const : > DARAM PAGE 1
.switch : > DARAM PAGE 1
.sysmem : > DARAM PAGE 1
.cio : > DARAM PAGE 1
}

中断程序:
#include "jicunqi.h"
TINT0_ISR()
{
asm(" SSBX XF");
asm(" SSBX INTM");
TCR=0x0010;//STOP THE TIMER0
TCR1=0x0010;//STOP THE TIMER1
TIM1=0xFFFF;//TIM1=FFFF
PRD1=0xFFFF;//PRD1=FFFF
TCR1=0x002F;//TDDR=1111B, AUTO LOAD THE PSC, START THE TIMER1
IMR=0x0080;
IFR=0x0080;
asm(" RSBX INTM");//START THE TIMER1
return;
}

TINT1_ISR()
{
asm(" RSBX XF");
asm(" SSBX INTM");
TCR1=0x0010;//STOP THE TIMER1
TCR=0x0010;//STOP THE TIMER0
TIM=0xFFFF;//TIM0=FFFF
PRD=0xFFFF;//PRD0=FFFF
TCR=0x002F;//TDDR=1111B, AUTO LOAD THE PSC, START THE TIMER0
IMR=0x0008;
IFR=0x0008;
asm(" RSBX INTM");//START THE TIMER0
return;
}

初始化程序:
#include "jicunqi.h"
void system_init()
{
//初始化MR,IFR,PMST,SWWSR等寄存器

IFR=0xFFFF; //clear the interrupt

IMR=0x0107; //1 stand for open the interrupt
PMST=0x3428; //OVLY=1,DROM=0
SWWSR=0x7E00;
}

定时器初始化程序:
#include "jicunqi.h"
void timer()
{
TCR=0x0010;//STOP THE TIMER0
TIM=0xFFFF;//TIM=FFFF
PRD=0xFFFF;//PRD=FFFF
TCR=0x002F;//TDDR=1111B, AUTO LOAD THE PSC, START THE TIMER0
IMR=0x0008;
IFR=0x0008;
asm(" RSBX INTM");
}

标签:  5402  方波程序  C程序


  发表评论

昵称: 验证码:
内容:
 
相关新闻
 · 基于DSP的孤立词语音识别系统的设计
 · 基于C语言和GEL语言的Flash编程
 · 我用C实现的5402方波程序
 · TMS320VC5402 HPI接口与
 · TMS320VC5402的HPI与51
 · DSP与串行A/D组成的高速并行数据采
 · 基于TMS320VC5402的手持式振
 · VC5402与外部存储器的接口设计
最新资讯
 · 便携电子产品电源测试的理想选择--吉时
 · 各种白光LED驱动电路特性评比
 · GPS技术在ITS的发展中得到了广泛的
 · 电子工程师心声:销售与我无关
 · 关于你的一生--IT人职业规划
 · 通过自适应曝光校正技术来改进拍照手机的
 · 嵌入式操作系统Nucleus下触摸屏驱
 · 模拟器件将投产手机3轴加速度传感器
 
  站内 站外
  Copyright(C)2008 Electronic Design & Application World All rights reserved.  《电子设计应用》杂志社 版权所有
联系电话:(86)10-66421136 66421836 66423836   传真:(86)10-66423936   京ICP备05012822号