北邮 DSP硬件实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
第三章 (2)
实验一 (2)
实验二 (3)
实验三 (4)
实验四 (5)
实验五 (9)
实验六 (13)
实验七 (17)
第四章 (35)
实验一 (35)
第三章
实验一
.mmregs ;定义存储器映像寄存器
.global _main ;全局符号,可在外部定义
_main:
stm #3000h,sp ;设置堆栈指针寄存器的值为3000h
ssbx xf ;置位状态寄存器xf=1,灯亮
call delay ;调用延时子程序,延时
rsbx xf ;将xf置0
call delay ;调用delay函数
b _main ;程序跳转到"_MAIN"
nop
nop
;延时子程序
delay:
stm 270fh,ar3 ;设置辅助寄存器ar3值为9999
loop1:
stm 0f9h,ar4 ;设置辅助寄存器ar4值为249
loop2:
banz loop2,*ar4- ;寄存器ar4值减一,当其值不为0时跳转到loop2 banz loop1,*ar3- ;寄存器ar3值减一,当其值不为0时跳转到loop1 ret ;可选择延迟的返回
nop ;空指令
nop
.end
.mmregs
.global _main
_main:
;store data 存入数据
stm 1000h,ar1 ;address of internal memory 寄存器ar1地址1000h
rpt #07h ;循环执行下一条指令8次
st 0aaaah,*ar1+ ;将数据"0AAAAH"存放到以地址1000H~1007H的八个存储单元中.
;
;read data then re-store 读取数据再存到别的寄存器中
stm 7h,ar3 ; 寄存器ar3地址7h
stm 1000h,ar1 ; 寄存器ar1地址1000h
stm 1008h,ar2 ; 寄存器ar2地址1008h
loop: ;循环的将1000H~1007H的八个单元中的数据COPY到1008H~100F的
;八个存储单元中.
ld *ar1+,t ;,把地址为ar1 的数据单元中的数据装到累加器t 中,ar1 = ar1 +1 st t,*ar2+
banz loop,*ar3-
here: ;死循环.
b here
.end
.mmregs ;定义映像寄存器
.global _main ;声明全局符号
.text
_main:
stm 3100h,sp ;设置堆栈指针寄存器的值为3100h
stm 1000h,ar1 ;设置辅助寄存器ar1值为1000h
portr 8000h,*ar1 ;读入I/O 8000H数据,将其存储到数据空间的1000H nop ;NOP为空操作,起延时作用.
nop
portw *ar1,8001h ;将数据空间的1000H单元的数据,写出到I/O 8000H nop
nop 5
b _main ;程序跳转到"_MAIN"执行.
nop
nop
.end
.global _c_int00,_timer0 ;引用函数c_int00,引用了c中的函数
.sect ".vecs" ;自定义一个已初始化段.vecs
reset: b _c_int00 ;复位中断向量,跳转到主程序
nop
nop
nmi: rete ;非屏蔽外部中断的输入引脚
nop
nop
nop
; software interrupts
sin17: .space 4*16 ;软件中断,内部中断,保留出中断向量的地址空间,将4*16的地址
;存储在sin17~sin30
sin18: .space 4*16
sin19: .space 4*16
sin20: .space 4*16
sin21: .space 4*16
sin22: .space 4*16
sin23: .space 4*16
sin24: .space 4*16
sin25: .space 4*16
sin26: .space 4*16
sin27: .space 4*16
sin28: .space 4*16
sin29: .space 4*16
sin30: .space 4*16
int0: rete ;此处int0中断响应为0,设置rete响应中断并返回
nop
nop
nop
int1: rete ;此处int1中断响应为0,设置rete响应中断并返回
nop
nop
nop
int2: rete ;此处int2中断响应为0,设置rete响应中断并返回
nop
nop
nop
tint0: b _timer0 ;同步串口0(McBSP0)接受中断,直接返回
nop
nop
brint0: rete ;同步串口0(McBSP1)发送中断,直接返回
nop
nop
nop
bxint0: rete ;同步串口0(McBSP1)发送中断,直接返回
nop
nop
nop
dmac0: rete ;RESERVED OR DMA CHANNEL0 INTERRUPT
nop
nop
nop
tint1_dmac1: rete ;TIMER1 INTERRUPT OR DMA CHANNEL1 INTERRUPT
nop
nop
nop
int3: rete ;外部中断int3,允许中断并返回
nop
nop
nop
hpint: rete ;HPI INTERRUPT
nop
nop
nop
brint1_dmac2: rete ;McBSP1 RECEIVE INTERRUPT OR DMA CHANNEL 2 INTERRUPT nop
nop
nop
bxint1_dmac3: rete ;McBSP1 TRANSMIT INTERRUPT OR DMA CHANNEL 3 INTERRUPT nop
nop
nop
dmac4: rete ;DMA CHANNEL 4 INTERRUPT
nop
nop
nop
dmac5: rete ;DMA CHANNEL 5 INTERRUPT
nop
nop
nop
; ****************************结束*****************************
;*************************************************************/
/*
;* 文件名称: exp04.c
;* 适用平台: EXPIII+实验系统
;* CPU类型: DSP TMS320VC54X
;* 软件环境: CCS3.1 (5000系列)
;* 试验接线: 1、实验箱的拨码开关SW2.4置OFF(54x的译码有效);54x CPU板的跳线J2的1、2短接
;* (HPI 8位模式);SW1的2、6置ON,其余置OFF(HPI使能;DSP工作微处理器方式;
;* CPU_CS=0);SW2全部置ON(FLASH工作在数据空间,LED灯D5的工作状态处于灭状态);;* 试验现象: LED灯(LED1~LED8)以一定的间隔时间不停闪亮变化;
;*************************************************************/
/************************文件预处理***************************/
#include "tms320uc5402.h"
/*************************************************************/
/********************全局变量定义与初始化*********************/
ioport unsigned port8001;
unsigned int show=0x00aa;
unsigned int num=0x0000;
/*************************************************************/
/*******************函数、子程序声明与定义********************/
void sys_ini() //系统初始化子程序
{
asm(" ssbx INTM"); //全局禁止所有可屏蔽中断
PMST&=0x00FF; //(DRAM映射到程序空间和数据空间)向量表映射到0x0080空间
SWWSR=0x7000; //io空间7个等待周期,程序与数据空间0个等待周期
CLKMD=0x17FA; //CLKOUT=2*CLKIN=2*10M=20M,自动延时最长时间
}
void timer0_ini() //定时器0初始化子程序
{
TCR|=0x0010; //停止定时器0
PRD=0x2710; //PRD=10000(D)
TCR|=0x000A; //TDDR=10(D),所以定时器时钟=1/(20M/10/10000)=5ms
IMR=0x0008; //使能定时器0中断
IFR=0xFFFF; //清除所有中断标志位
asm(" rsbx INTM"); //全局使能可屏蔽中断
TCR&=0xFFEF; //开始定时器0
TCR|=0x0020; //复位定时起0
}
/*************************************************************/
/*****************中断服务子程序声明与定义********************/
interrupt void timer0() //定时器0中断子程序
{
if(num==200) //记200次定时器中断,时间=200*5ms=1s
{
show=~show; //取反
num=0;
}
else
num++;
return;
}
/*************************************************************/
/**************************主程序*****************************/ void main(void)
{
sys_ini();
timer0_ini();
for(;;)
{
port8001=show;
}
}
/***************************结束******************************/
实验五
Initial.asm
.mmregs
.global _initial
.text
_initial:
NOP
LD #0, DP ;重置数据指针,为DP寄存器赋值0
;DP是状态寄存器ST0 的低9 位,和7 位(数据存储器地址)构成16 位数据存储区地址STM #0, CLKMD ;设置时钟模式寄存器的值为0
;可通过调整CLKMD 寄存器改变CPU 时钟。
;STM累加器的低端存放到存储器映射寄存器
STM #0, CLKMD ; LDM把存储器映射寄存器值装入到累加器
TstStatu1:
LDM CLKMD, A ;和poll STATUS (二进制)做与运算
AND #01b, A ;poll STATUS bit
BC TstStatu1, ANEQ ;BC为可选择延迟的条件转移;
STM #0xF7FF, CLKMD ; 111 0111 1111 1111,设置时钟10MHz
STM 0x3FA0, PMST ;MST是处理器模式状态寄存器,指向中断
;指针向量0011 1111 1010 0000, MP/MC =0,可对片内ROM 寻址ssbx 1,11 ; 置位ST1.INTM=1,停止所有的中断
stm #00h,imr ;stop all interrupt
stm #0ffffh,ifr ;clear all interrupt sign
stm #04h,imr ;allow int2 interrupt
rsbx 1,11 ;allow all interrupt
ret
.end
Int2.c
interrupt void int2c(); 对中断程序int2c()声明
extern void initial();引用外部程序initial()
extern void porta();引用外部程序porta()
extern void portb(); 引用外部程序portb()
int flag=0,i=0; 全局变量
main()
{
initial();//初始化
while(1) //死循环
{
; //空语句
}
}
interrupt void int2c() //中断子程序
{
i=i+1;
if(i==1) ;当i=1时,灯亮,否则令i=0
{
if(flag==0) ;当flag=0时,执行porta() ,ar1的值为5555h,即第1,3,5,7灯亮
{
flag=1;
porta();
i=0;
}
else
{
flag=0;
portb();
i=0;
}
}
Else ;当flag=1时,执行portb(),ar1的值为aaaah,即第2,4,6,8灯亮
{
i=0;
}
return;
}
port.asm
.mmregs
.global _porta
.global _portb
_porta:
stm 304h,ar1 ;设置辅助寄存器ar1,将304h放到ar1
st 5555h,*ar1 ;将5555h存储到地址为304h的内存中
portw *ar1,8001h ; portw:写按键,把寄存器ar1中的数据写到输出端口8001,用来输出控制亮灭ret ; ret可选择延迟的返回
_portb:
stm 304h,ar1
st 0aaaah,*ar1
portw *ar1,8001h
ret
vectors.asm
.sect ".vectors"
.ref _c_int00 ; C entry point
.ref _int2c
.align 0x80 ; must be aligned on page boundary
RESET: ; reset vector
BD _c_int00 ; branch to C entry point
STM #200,SP ; stack size of 200
nmi:
RETE ; enable interrupts and return from one
NOP
NOP
NOP ;NMI~
; software interrupts
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:
b _int2
c ;程序跳转的中断子程序
NOP
NOP
tint:
RETE
NOP
NOP
NOP rint0:
RETE
NOP
NOP
NOP xint0:
RETE
NOP
NOP
NOP rint1:
RETE
NOP
NOP
NOP xint1:
RETE
NOP
NOP
NOP int3:
RETE
NOP
NOP
NOP
实验六
exp06.c
;*************************************************************/
/*
;* 文件名称: exp06.c
;* 适用平台: EXPIII+实验系统
;* CPU类型: DSP TMS320VC54X
;* 软件环境: CCS3.1 (5000系列)
;* 试验接线: 1、实验箱的拨码开关SW2.4置OFF(54x的译码有效);54x CPU板的跳线J2的1、2短接
;* (HPI 8位模式);SW1的2、6置ON,其余置OFF(HPI使能;DSP工作微处理器方式;
;* CPU_CS=0);SW2全部置ON(FLASH工作在数据空间,LED灯D5的工作状态处于灭状态);
;* 2、SW2的sw2=ON,sw1=OFF;对应5X的int1中断分配给AD中断使用;JP3的3、6位置ON,其余置OFF;
:* S23全部置OFF;用连接线连接"模拟信号源"2号孔"信号源1"与"A/D单元"2号孔"ADIN1"。
;* 试验现象: 用图形观察窗口观察采样的AD波形。
;*************************************************************/
/************************文件预处理***************************/
#include "tms320uc5402.h"
/*************************************************************/
/********************全局变量定义与初始化*********************/
//ad7822的地址
ioport unsigned port8008;
unsigned int data_buff[256];
unsigned int j=0;
/*************************************************************/
/*******************函数、子程序声明与定义********************/
void sys_ini() //系统初始化子程序
{
//全局禁止所有可屏蔽中断
asm(" ssbx INTM");
//(DRAM映射到程序空间和数据空间)向量表映射到0x0080空间
PMST&=0x00FF;
//io空间7个等待周期,程序与数据空间0个等待周期
SWWSR=0x7000;
//设置pll为div模式
CLKMD=0x0000;
//等待设置完成
while(CLKMD==0x0001);
{
}
//CLKOUT=(3+1)*CLKIN=40M,自动延时最长时间
CLKMD=0x37FA;
//CLKOUT=(1+1)*CLKIN=20M,自动延时最长时间
//CLKMD=0x17FA;
}
void int1_ini()
{
IMR=0x0002; //使能外部中断1
IFR=0xFFFF; //清除所有中断标志位
asm(" rsbx INTM"); //全局使能可屏蔽中断
}
/*************************************************************/ /*****************中断服务子程序声明与定义********************/ interrupt void int1() //int1中断子程序
{
data_buff[j]=port8008&0x00FF; //读取ad7822转换数据
j++;
if(j==255)
{
j=0;
}
return;
}
/*************************************************************/ /**************************主程序*****************************/ void main(void)
{
sys_ini();
int1_ini();
for(;;)
{
}
}
/***************************结束******************************/ vectors.asm
; ************************************************************* ; *Copyright (c) 2005,北京精仪达盛科技有限公司研发部
; *All rights reserved
; *
; *文件名称:vectors.asm
; *备注:详细请参阅TI文档SPRS096B
; *************************************************************
.global _main,_int1
.sect ".vecs"
reset: b _main ;RESET VECTORS
nop
nop
nmi: rete ;NMI
nop
nop
nop
; software interrupts
sin17: .space 4*16
sin18: .space 4*16
sin19: .space 4*16
sin20: .space 4*16
sin21: .space 4*16
sin22: .space 4*16
sin23: .space 4*16
sin24: .space 4*16
sin25: .space 4*16
sin26: .space 4*16
sin27: .space 4*16
sin28: .space 4*16
sin29: .space 4*16
sin30: .space 4*16
int0: rete ;EXTERNAL INT0
nop
nop
nop
int1: b _int1 ;EXTERNAL INT1
nop
nop
int2: rete ;EXTERNAL INT2
nop
nop
nop
tint0: rete ;TIMER0 INTERRUPT
nop
nop
nop
brint0: rete ;BcBSP0 RECEIVE INTERRUPT
nop
nop
nop
bxint0: rete ;BcBSP0 TRANSMIT INTERRUPT
nop
nop
nop
dmac0: rete ;RESERVED OR DMA CHANNEL0 INTERRUPT
nop
nop
nop
tint1_dmac1: rete ;TIMER1 INTERRUPT OR DMA CHANNEL1 INTERRUPT
nop
nop
nop
int3: rete ;EXTERNAL INT3
nop
nop
nop
hpint: rete ;HPI INTERRUPT
nop
nop
nop
brint1_dmac2: rete ;McBSP1 RECEIVE INTERRUPT OR DMA CHANNEL 2 INTERRUPT nop
nop
nop
bxint1_dmac3: rete ;McBSP1 TRANSMIT INTERRUPT OR DMA CHANNEL 3 INTERRUPT nop
nop
nop
dmac4: rete ;DMA CHANNEL 4 INTERRUPT
nop
nop
nop
dmac5: rete ;DMA CHANNEL 5 INTERRUPT
nop
nop
nop
.end
; ****************************结束*****************************
实验七
;*************************************************************/
/*
;* 文件名称: da7303_54.c
;* 适用平台: EXPIII+实验系统
;* CPU类型: DSP TMS320VC54X
;* 软件环境: CCS3.1 (5000系列)
;* 试验接线: 1、实验箱的拨码开关SW2.4置OFF(54x的译码有效);54x CPU板的跳线J2的1、2短接
;* (HPI 8位模式);SW1的2、6置ON,其余置OFF(HPI使能;DSP工作微处理器方式;
;* CPU_CS=0);SW2全部置ON(FLASH工作在数据空间,LED灯D5的工作状态处于灭状态);;* 试验现象: 用示波器检测D/A转换单元的2号孔接口"输出1"输出一个正弦波;
;*************************************************************/
//------------------头文件--------------------------------------
#include "DspRegDefine.h" //VC5402 寄存器定义
#include "math.h"
//---------------------------------------------------------------
/* ****************** 宏定义***************
************************************************************
*/
#define UCHAR unsigned char
#define UINT16 unsigned int
#define UINT32 unsigned long
#define TRUE 1
#define FALSE 0
#define pi 3.1415926
#define LEN 256
//--------------- AD7303 控制字--------------------------------
// 15--------14-------13-----12-----11-----10------9-------8-----
// INT/EXT---X--------LDAC---PDB---PDA-----A/B-----CR1-----CR0---
// 参考电压--保留---- -B省电--A省电----0/A-1/B-
//-------------------------------------------------------------
//---------------------------------------------------------
/* 端口定义*/
//---------------------------------------------------------
ioport UINT16 port8001; //定义输出io端口为0x8001;
//----------------------------------------------------------
//----------------------------------------------------------
/* 全局变量定义*/
//---------------------------------------------------------
int data_buff[LEN]; //数据缓冲
UINT16 show = 0x00aa; //LED显示的数值
/*
********************************************************************** *************** 所使用的函数原型*****************
********************************************************************** */
void cpu_init(void); //初始化CPU
void Delay(UINT16 numbers); //延迟
extern void delay_3us(void); //3us延迟
void mcbsp0_write_rdy(UINT16 out_data);//MCBSP0发送一个数据
void mcbsp0_init_SPI(void);//MCBSP0设置为SPI模式
void mcbsp0_close(void);//MCBSP0关闭
//-------------------------------------------------------------------
/*
************************************************************************ *********************** 函数定义******************
************************************************************************ */
//--------------------------------------------------------------------
// 函数名称: void cpu_init(void)
// 函数说明: 初始化CPU
// 输入参数: 无
// 输出参数: 无
//--------------------------------------------------------------------
void cpu_init(void)
{
asm(" nop ");
asm(" nop ");
asm(" nop ");
//-------------------------------------------------------------------
//CLKMD DEFINITIONS:
// PLLMUL (bit 15-12) - 0000 PLL multiplier = 0 (mult by 1)
// PLLDIV (bit 11) - 0 PLL divider = 0 (div by 1)
// PLLCOUNT (bit 10-3)- 11111111 PLL counter set to max
// PLLONOFF (bit 2) - 1 PLL on
// PLLNDIV (bit 1) - 1 Select PLL mode
// PLLSTATUS (bit 1) - x PLL Status (read only)
// ------------------
// 0000011111111111 = 0x07ff CLKMD=1 X CLKIN
//--------------------------------------------------------------------
*(unsigned int*)CLKMD=0x0; //switch to DIV mode clkout= 1/2 clkin
while(((*(unsigned int*)CLKMD)&01)!=0);
*(unsigned int*)CLKMD=0x37ff; //switch to PLL X 4 mode
//--------------------------------------------------------------------
// ST0 DEFINITIONS:
// ARP (bit 15-13) - 000 Auxiliary register pointer
// TC (bit 12) - 1 Test/control flag
// C (bit 11) - 1 Carry is set to 1 if the result of an addition generates a carry; it is cleared to 0 if the
// result of a subtraction generates a borrow.
// OVA (bit 10) - 0 Overflow flag for accumulator A
// OVB (bit 9) - 0 Overflow flag for accumulator B
// DP (bit 8-0) - 00000000 Data-memory page pointer
// --------------------
// 0001 1000 0000 0000 =0x1800 Reset value
//--------------------------------------------------------------------
// *(unsigned int*)ST0=0x1800;
//--------------------------------------------------------------------
// ST1 DEFINITIONS:
// BRAF (bit 15) - 0 Block-repeat active flag
// CPL (bit 14) - 1 Compiler mode CPL=0 DP;CPL=1 SP
// XF (bit 13) - 1 XF status
// HM (bit 12) - 0 Hold mode
// INTM (bit 11) - 1 Interrupt mode INTM=0,All unmasked interrupts are enabled
// Reser (bit 10) - 0 Always read as 0
// OVM (bit 9) - 0 Overflow mode
// SXM (bit 8) - 1 Sign-extension mode
// C16 (bit 7) - 0 Dual 16-Bit/double-precision arithmetic mode
// FRCT (bit 6) - 0 Fractional mode
// CMPT (bit 5) - 0 Compatibility mode
// ASM (bit 4-0) - 00000 Accumulator shift mode
// --------------------
// 0110 1001 0000 0000 =0x2900 Reset value
//--------------------------------------------------------------------
// *(unsigned int*)ST1=0x6900;
//--------------------------------------------------------------------
//IPTR DEFINITIONS?
// IPTR (bit 15-7) - 001111111 Run-time Interrupt vector location = 0x3f80 (for now)
// MP/~MC (bit 6) - 1 Turn off internal Instruction ROM (use RAM)
// OVLY (bit 5) - 1 Turn on internal RAM
// AVIS (bit 4) - 1 Address visibility on
// DROM (bit 3) - 0 Data ROM of FF00~FFFF is external
// CLKOFF (bit 2) - 0 Clockout enabled,only for use clkout=cpu clock
// SMUL (bit 1) - 1 Saturate before multiply on MAC
// SST (bit 0) - 0 Do not saturate before store
// -----------------
// 0011 1111 1111 0010 = 0x3ff2
/*---------------------------------------------------------------------*/
*(unsigned int*)PMST=0x3FF2;
//---------------------------------------------------------------------
// SWWSR DEFINITIONS?
// XPA (bit 15) - 0 Extended program address control bit. XPA is used in conjunction with the program space fields
// (bits 0 through 5) to select the address range for program space wait states
// I/O (bits 14-12) - 111 set to max wait states for seven
// Data1 (bits 11-9) - 111 Seven Wait state for Upper data space(0x8000-0xFFFF)
// Data2 (bits 8-6) - 111 Seven Wait states for Lower data space (0x0000 - 0x7FFF)
// Prog1 (bits 5-3) - 111 Seven Wait state for Upper program space. (xx8000-xxFFFF)
// Prog2 (bits 2-0) - 111 Seven Wait states for Program space. (xx0000-xx7FFF)
// -----------------
// 1 111 111 111 111 111 - 0x7fff
/*--------------------------------------------------------------------*/
*(unsigned int*)SWWSR=0x7fff;
//--------------------------------------------------------------------
//SWCR DEFINITIONS?
// Reserved (bits 15-1)
// SWSM (bit 0) - 1 wait-state base values are mulitplied by 2
// for a maximum of 14 wait states.
// --------------------------
// 0000 0000 0000 0001
//--------------------------------------------------------------------
*(unsigned int*)SWCR=0x0001;
//--------------------------------------------------------------------
//BSCR DEFINITIONS?
// BNKCMP (bit 15-12) - 1111 Bank compare. Determines the external memory-bank size. BNKCMP is used to mask the four MSBs of
// an address.
// 1111 4k
// 1110 8k
// 1100 16k
// 1000 32k
// 0000 64k
// PS-DS (bit 11) - 1 One extra cycle is inserted between consecutive data and program reads.
// Reserved (bits 10-3) - 00000000
// HBH (bit 2) - 0 The hpi bus holder is disabled
// BH (bit 1) - 0 The data bus holder is disabled
// EXIO (bit 0) - 0 The external bus interface functions as usual
// ------------------------------------
// 1111 1000 0000 0000
//--------------------------------------------------------------------
*(unsigned int*)BSCR=0xf800;
//--------------------------------------------------------------------
asm(" ssbx intm "); //Disable all mask interrupts
//--------------------------------------------------------------------
// IMR DEFINITIONS
// Writing a 1 to any IMR bit position enables the corresponding interrupt (when INTM = 0)
// Reserved (bits 15-14) - xx
// DMAC5 (bit 13) - 0 DMA channel 5 interrupt mask bit
// DMAC4 (bit 12) - 0 DMA channel 4 interrupt mask bit
// BXINT1/DMAC3 (bit 11) - 0 McBSP1 transmit interrupt mask bit, or the DMA channel 3
// BRINT1/DMAC2 (bit 10) - 0 McBSP1 receive interrupt mask bit, or the DMA channel 2
// HPINT (bit 9) - 0 Host to ’54x interrup /mask
// INT3 (bit 8) - 0 External interrupt 3 mask
// TINT1/DMAC1 (bit 7) - 0 timer1 interrupt mask bit, or the DMA channel 1 interrupt mask bit
// DMAC0 (bit 6) - 0 reserved, or the DMA channel 0 interrupt mask bit
// BXINT0 (bit 5) - 0 McBSP0 transmit interrupt mask bit
// BRINT0 (bit 4) - 0 McBSP0 receive interrupt mask bit
// TINT0 (bit 3) - 0 Timer 0 interrupt mask bit
// INT2 (bit 2) - 0 External interrupt 2 mask bit
// INT1 (bit 1) - 0 External interrupt 1 mask bit
// INT0 (bit 0) - 0 External interrupt 0 mask bit
// ------------------------------
// 0000 0000 0000 0000
//--------------------------------------------------------------------
*(unsigned int*)IMR=0x0;
//--------------------------------------------------------------------
// IFR DEFINITIONS
// Writing a 1 to any IFR bit position clear the corresponding interrupt mask ,when corresponding interrupt occur IFR corresponding bit=1
// Reserved (bits 15-14) - xx
// DMAC5 (bit 13) - 1 DMA channel 5 interrupt flag bit
// DMAC4 (bit 12) - 1 DMA channel 4 interrupt flag bit
// BXINT1/DMAC3 (bit 11) - 1 McBSP1 transmit interrupt flag bit, or the DMA channel 3
// BRINT1/DMAC2 (bit 10) - 1 McBSP1 receive interrupt flag bit, or the DMA channel 2
// HPINT (bit 9) - 1 Host to ’54x interrutpflak
// INT3 (bit 8) - 1 External interrupt 3 flag
// TINT1/DMAC1 (bit 7) - 1 timer1 interrupt flag bit, or the DMA channel 1 interrupt mask bit
// DMAC0 (bit 6) - 1 reserved, or the DMA channel 0 interrupt flag bit
// BXINT0 (bit 5) - 1 McBSP0 transmit interrupt flag bit
// BRINT0 (bit 4) - 1 McBSP0 receive interrupt flag bit
// TINT0 (bit 3) - 1 Timer 0 interrupt flag bit
// INT2 (bit 2) - 1 External interrupt 2 flag bit
// INT1 (bit 1) - 1 External interrupt 1 flag bit
// INT0 (bit 0) - 1 External interrupt 0 flag bit
// ------------------------------
// 1111 1111 1111 1111
/*--------------------------------------------------------------------*/
*(unsigned int*)IFR=0xffff;
//--------------------------------------------------------------------
asm(" nop ");
asm(" nop ");
asm(" nop ");
}
/*
***********************************************************
- 函数名称: void Delay(int numbers)
- 函数说明: 延时
- 输入参数: numbers
- 输出参数: 无
***********************************************************
*/
void Delay(UINT16 numbers)
{
UINT16 i,j;
for(i=0;i<4000;i++)
for(j=0;j<numbers;j++);
}
/*
*************************************************************************
- 函数名称: void mcbsp0_write_rdy(UINT16 out_data);
- 函数说明: MCBSP0发送一个数据
- 输入参数: data
- 输出参数: 无
- 补充说明: 内部带是否发送完成的判断
**************************************************************************
*/
void mcbsp0_write_rdy(UINT16 out_data)
{
UINT16 j;
*(unsigned int*)McBSP0_SPSA=0x0001; //McBSP0_SPSA 指向SPCR2
while ((*(unsigned int *)McBSP0_SPSD&0x0002)==0);
//mask XRDY bit,XRDY = 1 Transmitter is ready for new data in DXR[1,2].
for(j=0;j<20;j++); //delay
*(unsigned int *)McBSP0_DXR1= out_data;
}
/*
************************************************************************* - 函数名称: void mcbsp0_init_SPI(void);
- 函数说明: MCBSP0设置为SPI模式
- 输入参数: 无
- 输出参数: 无
- 补充说明:
************************************************************************** */
void mcbsp0_init_SPI(void)
{
//--------------------------------------------------------
//复位McBSP0
*(unsigned int*)McBSP0_SPSA=0x0000;//SPCR1
*(unsigned int*)McBSP0_SPSD=0x0000;//设置SPCR1.0(RRST=0)
*(unsigned int*)McBSP0_SPSA=0x0001;//SPCR2
*(unsigned int*)McBSP0_SPSD=0x0000;//设置SPCR1.0(XRST=0)
//---------------------------------------------------------
//延迟
Delay(0); //延迟4000*CPU 时钟周期
//等待复位稳定
//---------------------------------------------------------
//配置McBSP0为SPI 模式
*(unsigned int*)McBSP0_SPSA=0x0000;//SPCR1
*(unsigned int*)McBSP0_SPSD=0x1800;
//DLB (bit 15) 0 Digital loop back mode disabled
//RJUST (bit 14-13) 00 Right-justify and zero-fill MSBs in DRR[1,2]
//CLKSTP (bit 12-11) 11
//X (bit 10-8) 000 Reserved
//DXENA (bit 7) 0 data transmit delay bit.DX enabler is off
//ABIS (bit 6) 0 A-bis mode is disabled
//RINTM (bit 5-4) 00 RINT driven by RRDY
//RSYNER (bit 3) 0 No synchronization error
//RFULL (bit 2) 0 RBR[1,2] is not in overrun condition
//RRDY (bit 1) 0 Receiver is not ready
//RRST (bit 0) 0 Serial port receiver is disabled and in reset state
//---------- 0001 1000 0000 0000
*(unsigned int*)McBSP0_SPSA=0x0001;//SPCR2
*(unsigned int*)McBSP0_SPSD=0x0000;
//X (bit 15-10) 000000 Reseved
//FREE (bit 9) 0 Free running mode is disabled
//SOFT (bit 8) 0 SOFT mode is disabled
//FRST (bit 7) 0 Frame-synchronization logic is reset.
//GRST (bit 6) 0 Sample rate generator is reset
//XINTM (bit 5-4) 00 XINT driven by XRDY
//XSYNER (bit 3) 0 No synchronization error
//XEMPTY (bit 2) 0 XSR[1,2] is empty
//XRDY (bit 1) 0 Transmitter is not ready
//XRST (bit 0) 0 serial port transmitter is disabled and in reset state
//---------- 0000 0000 0000 0000
*(unsigned int*)McBSP0_SPSA=0x000E;//PCR
*(unsigned int*)McBSP0_SPSD=0x0A0C;
//X (bit 15-14) 00 Reseved
//XIOEN (bit 13) 0 DX, FSX and CLKX are configured as serial port
//RIOEN (bit 12) 0 DR, FSR, CLKR and CLKS are configured as serial port
//FSXM (bit 11 1 Frame synchronization is determined by the sample rate
//generator
//FSRM (bit 10) 0 Frame-synchronization pulses generated by an external
//device. FSR is an input pin
//CLKXM (bit 9) 1 CLKX is an output pin and is driven by the internal sample
//rate generator.
//CLKRM (bit 8) 0 Receive clock (CLKR) is an input driven by an external
//X (bit 7) 0 Reserved
//CLKS_STAT(bit 6) 0 CLKS pin status.
//DX_STAT (bit 5) 0 DX pin status.
//DR_STAT (bit 4) 0 DR pin status.
//FSXP (bit 3) 1 Frame-synchronization pulse FSX is active low
//FSRP (bit 2) 1 Frame-synchronization pulse FSR is active low
//CLKXP (bit 1) 0 Transmit data sampled on rising edge of CLKX
//CLKRP (bit 0) 0 Receive data sampled on falling edge of CLKR
//---------- 0000 1010 0000 1100
*(unsigned int*)McBSP0_SPSA=0x0002;//RCR1
*(unsigned int*)McBSP0_SPSD=0x0040;//
//X (bit 15) 0 Reserved
//RFRLEN1 (bit 14-8) 0000000 Receive Frame Length 1,RFRLEN1 = 000 0000 1 word per frame
//RWDLEN1 (bit 7-5) 010 Receive Word Length 1,RWDLEN1 = 010 16 bits
//X (bit 4-0) 00000 Reserved
//----- 0000 0000 0100 0000
*(unsigned int*)McBSP0_SPSA=0x0003;//RCR2
*(unsigned int*)McBSP0_SPSD=0x0041;//
//RPHASE (bit 15) 0 Receive Phases,RPHASE = 0 Single-phase frame
//RFRLEN2 (bit 14-8) 0000000 Receive Frame Length 2,RFRLEN2 = 000 0000 1 word per frame //RWDLEN2 (bit 7-5) 010 Receive Word Length 2,RWDLEN2 = 010 16 bits
//RCOMPAND(bit 4-3) 00 No companding,
//RFIG (bit 2) 0 Receive Frame Ignore
//RDATDLY (bit 1-0) 01 Receive data delay,1-bit data delay
//----- 0000 0000 0100 0001
*(unsigned int*)McBSP0_SPSA=0x0004;//XCR1
*(unsigned int*)McBSP0_SPSD=0x0040;
//X (bit 15) 0 Reserved
//XFRLEN1 (bit 14-8) 0000000 Transmit Frame Length 1,RFRLEN1 = 000 0000 1 word per frame
//XWDLEN1 (bit 7-5) 010 Transmit Word Length 1,RWDLEN1 = 010 16 bits
//X (bit 4-0) 00000 Reserved
//----- 0000 0000 0100 0000
*(unsigned int*)McBSP0_SPSA=0x0005;//XCR2
*(unsigned int*)McBSP0_SPSD=0x0041;
//XPHASE (bit 15) 0 Transmit Phases,RPHASE = 0 Single-phase frame
//XFRLEN2 (bit 14-8) 0000000 Transmit Frame Length 2,RFRLEN2 = 000 0000 1 word per frame //XWDLEN2 (bit 7-5) 010 Transmit Word Length 2,RWDLEN2 = 010 16 bits
//XCOMPAND(bit 4-3) 00 No companding,
//XFIG (bit 2) 0 Transmit Frame Ignore
//XDATDLY (bit 1-0) 01 Transmit data delay,1-bit data delay
//----- 0000 0000 0100 0001
*(unsigned int*)McBSP0_SPSA=0x0006;//SRGR1
//*(unsigned int*)McBSP0_SPSD=0x0063;
*(unsigned int*)McBSP0_SPSD=0x0009;
//FWID (bit 15-8) 00000000 Frame Width
//CLKGDV (bit 7-0) 0110 0100 Sample Rate Generator Clock Divider
//CLKG = CPUCLOCK/(CLKGDV+1)
// WHEN CPUCLOCK=40MHZ,CLKG=4MHZ
//---- 0000 0000 0110 0011
*(unsigned int*)McBSP0_SPSA=0x0007;//SRGR2。