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

📄 adda_main.c

📁 adda 转化 c和汇编共同实现 关于DSP设计的
💻 C
字号:
/******************************************************************************/
/*main.c                                                   		              */
/*                                                                            */
/* This is proprietary information, not to be published -- DIGIPRO DATA   	  */
/* Copyright (C) 2002, DigiPro Information Co.,Ltd.  All Rights Reserved.     */
/*                                                                            */
/* Author: Wu DingMing & Li Fayue                                             */
/* Date: August 12-28, 2002                                                      */
/******************************************************************************/
#include <stdio.h>
#include "mmdrv.h"
#include "mcbsp.h"
#include "cpu_reg.h"    
#include "lcd_86.h"
#include "adda.h"
 
ioport unsigned portefff;	
#define 	IO_374	 portefff

void init_exint1_interrupt();
void init_GPIO(void);   
unsigned int dc_ADC(unsigned int Channel);
void ac_ADC(unsigned int Channel);
void ac_DAC(void);
void ac_sin_wave(unsigned int Channel);

unsigned int adcbuf[0x400];
 
unsigned int flag=0xffff;
 
void main(void)
{
unsigned int i,j,data;		
unsigned int key_val;
 
 	SWWSR = 0x7fff;
    SWCR = 0x0001;
    BSCR = 0x8006;	  
    CLKMD = PLL_DIV_INIT;
    waitloop( 0x0400 );
    CLKMD = PLL_LOCK_INIT_X(5);	
    waitloop( 0x0400 );        
	PMST = 0x0168;

 	init_exint1_interrupt();
	Init_MCBSP_To_IO();
	Init_ADC();
	
    init_GPIO();   
    init_lcd();
  	LCD_clear(0);
	cur_row=2;        
	cur_col=20;        
    LCD_pr_chars("   AD_DA TEST   ",16);
	cur_row=3;        
	cur_col=1;        
    LCD_pr_chars("=======================",23);
 
	IO_374=0xffff;		//374 enable

    Close_LED_Data();
    Close_LED_Traf();
    Close_LED_sign();
    waitloop( 0x0400 );
         
 	while(1)
	{
 		i=Get_Key();
        waitloop( 0x04000 );
		j=Get_Key();

        if(i==j)
         {	
			flag=0xffff;
			key_val=j;		/*Save key_val*/
			          	 		 
  	  	    switch(key_val)
	  	     {
	           default: 
	    	    break;
	           case 1:
				cur_row=4;        
				cur_col=10;        
			    LCD_pr_chars("  DC_Input: ADC  ",17);
//				cur_row=5;        
//				cur_col=15;        
//    			LCD_pr_chars("                 ",17);
     		    dc_ADC(ADC_CHANNEL1);      
	      		break;
	           case 2:
				cur_row=4;        
				cur_col=10;        
			    LCD_pr_chars(" DAC_Ouput: Wave ",17);
				cur_row=5;        
				cur_col=15;        
    			LCD_pr_chars("/////////////////",17);
			    ac_DAC();
	      		break;
	           case 3:
				cur_row=4;        
				cur_col=10;        
			    LCD_pr_chars(" AC_Intput ADDAC ",17);
				cur_row=5;        
				cur_col=15;        
    			LCD_pr_chars("  ~~~~~~~~~~~~~  ",17);
	            ac_sin_wave(ADC_CHANNEL0);
	      		break;
             }
         }    
 	}
}

void init_exint1_interrupt()   
{
	IFR =0xffff;
 	IMR =0x0002;		//EXINT1=IMR.8		
	asm("\trsbx\tintm ");

}    
 
interrupt void EXINT1_isr()
{
unsigned int i;

	IFR =0xffff;
//   		while(!(GPIOSR&0x01))
		 {
				asm("\tnop");
				asm("\tnop");
		 }

	flag=0;	//~flag;
	cur_row=5;        
	cur_col=1;        
    LCD_pr_chars("                       ",23);
}

void init_GPIO(void)   
{
	GPIOCR =0xfffe;   //EXINT1=GPIO.0=input=0,nand_cs=GPIO.6=output=1
 	GPIOSR =0x0040;	  //GPIO.6=output=1			
}    

unsigned int dc_ADC(unsigned int Channel)
{
	unsigned int i,data;
	char buf[12];
	while(flag)
	{
		data =0;
		for(i=0;i<16;i++)
			data += read_ADC(Channel);
		data = (unsigned int)(((unsigned long)data*0x699AL)/0xfff0);

		cur_row=5;        
		cur_col=1;        
	    LCD_pr_chars(" AD_val=        ",23);
        cur_row = 5;     
		cur_col = 55;
		
		Float16_to_String(data,13,9,buf);
		LCD_pr_chars(buf,11); 
	    waitloop( 0x40000L );        

	}
	return(data);
}
void ac_ADC(unsigned int Channel)
{
	unsigned int data;
	while(1)
	{
		data = read_ADC(Channel);
		DAC_single_output(DAC_CHANNELA,data,DAC_2048V_REF,DAC_FAST_SPEED);
    }
    return;
}            
void ac_DAC(void)
{
	unsigned int i,j;
	while(1)
	 {
 		for(i=0;i<3076;i++)	//4096
		 {
			DAC_double_output(i,4095-i,DAC_2048V_REF,DAC_FAST_SPEED);	    
			//waitloop(0x100L);        
  			if(!flag)	
			 {
				break;
			 }
		 }
		if(!flag)		
		 {
			break;
		 }
  	  }
	DAC_power_down();
	return;
}
void ac_sin_wave(unsigned int Channel)
{
	unsigned int data;
	unsigned int i=0;
	for(i=0;i<1024;i++)
	 {
 		adcbuf[i]=0;
	 }
	i=0;
 	while(1)
	{
		data = read_ADC_FAST(Channel);
		DAC_single_output(DAC_CHANNELA,data,DAC_2048V_REF,DAC_FAST_SPEED);
 		adcbuf[i++]=data;
		if(i==0x400)
		 {
		 	i=0;
		 }
   	    if(!flag)		
	 	{
			break;
	 	}
    }
	DAC_power_down();
    return;

} 

⌨️ 快捷键说明

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