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

📄 init1835viaspi.asm

📁 在ADSP-2126x上编写的优化过的IIR滤波器程序(用c和汇编编写)。
💻 ASM
字号:

#include <def21262.h>
#include "ad1835.h"

.global _init1835viaSPI;


//===============================================================

.section/dm seg_dmda;

.var spi_semaphore;
.var config_tx_buf[]=          // Buffer of configuration data
			WR | DACCTRL1 | DACI2S | DAC24BIT | DACFS48,
			WR | DACCTRL2, // e.g.: | DACMUTE_R1 | DACMUTE_L2, 
			WR | DACVOL_L1 | DACVOL_MAX,
			WR | DACVOL_R1 | DACVOL_MAX,
			WR | DACVOL_L2 | DACVOL_MAX,
			WR | DACVOL_R2 | DACVOL_MAX,
			WR | DACVOL_L3 | DACVOL_MAX,
			WR | DACVOL_R3 | DACVOL_MAX,
			WR | DACVOL_L4 | DACVOL_MAX,
			WR | DACVOL_R4 | DACVOL_MAX,
			WR | ADCCTRL1 | ADCFS48,
			WR | ADCCTRL2 | ADCI2S | ADC24BIT,
			WR | ADCCTRL3 | IMCLKx2 | PEAKRDEN; 		

//===============================================================

.section/pm seg_pmco;

_init1835viaSPI:
	
	//--------------------------
	// Clear regs to start
	r0 = 0;
	dm(SPIFLG)=r0;

	
	//---------------------------------------------------------
	// Writing TXFLSH and RXFLSH bits in SPICTL clear the SPI
	// transmit and receive FIFOs, respectively.
	r0 = dm(SPICTL);
	r1 = (TXFLSH | RXFLSH );
	r0 = r0 OR r1;
	dm(SPICTL)=r0;
	
	
	//----------------------------
	// Set the baud rate to 1 MHz
	r0 = 100;
	dm(SPIBAUD) = r0;
	
	
	//--------------------------------------------
	// Set the SPIFLG register to FLAG3 (0xF708)
	r0 = 0xF708;
	dm(SPIFLG) = r0;
	
	
	//------------------------------------------------------
	// Now set the SPI control register 
	r0 = (SPIEN |   // enable the port
		  MS |      // set SHARC as SPI master
		  MSBF |    // send MSB first
		  WL16 |    // word length = 16 bits
		  TIMOD1);  // Initialize SPI port to begin
	                  // transmitting when DMA is enabled 
	dm(SPICTL) = r0;
	
	
	//-------------------------------------------
	// Set up DAG registers to transmit via SPI
	i4 = config_tx_buf;
	m4 = 1;

		
	//------------------------------
	// Set up loop to transmit data 
	lcntr = LENGTH(config_tx_buf), do word_sent until lce;
	
	    // Send a word
	    r0=dm(i4,m4);
	    dm(TXSPI)=r0;
	    
	    // Wait until "SPI transfer complete" status bit 
	    //   in SPISTAT (SPIF) indicates that we can send more
		do checkIfTXisDone until TF;
		
		    ustat3 = dm(SPISTAT);
		    BIT TST ustat3 SPIF;
		    
		checkIfTXisDone:
	    nop;
	    
	    // Wait an extra 100 cycles to meet the timing 
	    //   requirements of the AD1835A
		lcntr = 100, do pauseFor1835 until lce;
		pauseFor1835:
	    nop;
	    
	    	    
	word_sent:
	nop;
	
/*
	//-----------------------------------------
	// Flush SPI buffers after initialization
	//   You may want to do this before sending
	//   other SPI commands to guarantee that
	//   you have not accidentally left data in
	//   the transmit or receive FIFOs.
	r0 = dm(SPICTL);
	r1 = (TXFLSH | RXFLSH );
	r0 = r0 OR r1;
	dm(SPICTL)=r0;
*/
		  
	rts;

	
_init1835viaSPI.end:  












	// should never get here...
	jump (pc,0);

⌨️ 快捷键说明

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