⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dspb.c

📁 源程序是在VisualDSP环境下开发出来的
💻 C
字号:
#include <defTS101.h>
#include <sysreg.h>
#include <builtins.h>
#include <signal.h>
#include <math.h>
#include "TCB_B.h"

extern void sysinit(void);
extern void cf_init(void);
extern unsigned char AddToFile(unsigned int *Ptr_add,unsigned int line_in_cnt);//just can add data to the new created file

void dma0_d_int();
//void irq0_d_int();
void link3_recv_int();
void frame_test();
void SetTCB0_trans(long DI_Source, long DX_Source, long DY_Source, long DP_Source,
             	   long DI_Destin, long DX_Destin, long DY_Destin, long DP_Destin);
void SetLink3TCB_recv(long DI,long DX,long DY,long DP);

int line_in_cnt,sqctl_reg;
//Ptr_datain,Ptr_dataout两个指针用来指示输入和输出数据指向地址
long *Ptr_datain,*Ptr_dataout,*Ptr_ide;
//sw_flag 用来作为缓冲区切换的标志
int sw_flag=0;

void main (void)
{
	volatile int temp;
	Ptr_ide = data_b_buf1;	
	//初始化
	line_in_cnt = 0;
	sysinit();
	cf_init();
	
	sqctl_reg = __builtin_sysreg_read(__SQCTL);
	sqctl_reg = sqctl_reg | 0x00F00000;	
    sqctl_reg = sqctl_reg | 0x01000000;
	__builtin_sysreg_write(__SQCTL, sqctl_reg);
    
	// 开中断
	
    temp = __builtin_sysreg_read(__IMASKH);
    temp = temp | INT_GIE | INT_DMA11;
    __builtin_sysreg_write(__IMASKH, temp);
    
    temp = LCTL_LREN | LCTL_PSIZE | LCTL_LTEN | LCTL_DIV8;
    __builtin_sysreg_write(__LCTL3, temp);
    
    //设置中断向量表
    interruptf(SIGDMA11, link3_recv_int);     
     //设置DMA控制字 

    Link3TCB.DP = (TCB_EXTMEM | TCB_QUAD | TCB_DMAR | TCB_INT);		
	
    Link3TCB.DI = (long) data_b_buf1;
    SetLink3TCB_recv(Link3TCB.DI,Link3TCB.DX,Link3TCB.DY,Link3TCB.DP);
    
	while(1);

}


//***********************************************************************
// Setup link3TCB register (DI_Source, DX_Source, DY_Source, DP_Source
//                          DI_Destin, DX_Destin, DY_Destin, DP_Destin)
//***********************************************************************

void SetLink3TCB_recv(long DI,long DX,long DY,long DP)
{
	volatile __builtin_quad TCB_Clear, TCB_Set;
	TCB_Clear = __builtin_compose_128((long long)TCB_DISABLE << 32, 0);
	__builtin_sysreg_write4(__DC11, TCB_Clear);
	TCB_Set = __builtin_compose_128(((long long)DX << 32) | DI, ((long long)DP << 32) | DY);
	__builtin_sysreg_write4(__DC11, TCB_Set); 
}

//连路口3中断处理程序,表示受到前一个dsp传来的数据,下面开始往
//硬盘送数
void link3_recv_int()
{
	line_in_cnt++;
		
	if(line_in_cnt==625) frame_test();
			
	//设置连路口3DMA接受一行数据
	Link3TCB.DI = Link3TCB.DI + 360;
	SetLink3TCB_recv(Link3TCB.DI,Link3TCB.DX,Link3TCB.DY,Link3TCB.DP);
	
}

//调试用
void frame_test()
{
	int i;
//	line_in_cnt = 0;
	for(i=0;i<625;i++)
	{
		Ptr_ide = Ptr_ide + 360;
		AddToFile(Ptr_ide,i);
	}
	sqctl_reg = sqctl_reg & 0xFEFFFFFF;
	__builtin_sysreg_write(__SQCTL, sqctl_reg);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -