spi core driven.asm

来自「ADI 公司的DSP ADSP21262 EZ-KIT LITE开发板的全部源代」· 汇编 代码 · 共 66 行

ASM
66
字号
/* SPI Control Registers                                  */
#define SPICTL  (0x1000)
#define SPIFLG  (0x1001)
#define SPIBAUD (0x1005)
#define TXSPI   (0x1003)

/*SPICTL bits                                             */
#define TIMOD1  (0x0001)  /* Use DMA for transfers        */
#define DMISO   (0x0020)  /* Disable MISO pin             */
#define WL32    (0x0100)  /* SPI Word Length = 32         */
#define SPIMS   (0x1000)  /* SPI Master if 1, Slave if 0  */
#define SPIEN   (0x4000)  /* SPI Port Enable              */

/*SPIFLG bits                                             */
#define DS0EN   (0x0001)  /* use FLG0 as SPI device-select*/

/* Default Buffer Length */
#define BUFSIZE 10

.SECTION/DM seg_dmda;
/* Transmit Buffer */
.var tx_buf[BUFSIZE]=   0x11111111,
                        0x22222222,
                        0x33333333,
                        0x44444444,
                        0x55555555,
                        0x66666666,
                        0x77777777,
                        0x88888888,
                        0x99999999,
                        0xAAAAAAAA;

/* Main code section */
.global _main;
.SECTION/PM seg_pmco;
_main:
/* Init SPI MASTER TX */
r0=0;
dm(SPICTL)=r0;
dm(SPIFLG)=r0;

/* set the SPI baud rate to CCLK/4*64 (781.25KHz @ 200MHz)*/
ustat3 = 0x64;
dm(SPIBAUD)=ustat3;

/* Set up DAG registers */
i4=tx_buf;
m4=1;

ustat3 = DMISO|  /* Disable MISO on transfers */
         WL32|   /* 32-bit words */
         SPIMS|  /* Master mode (internal SPICLK) */
         SPIEN|  /* Enable SPI port */
         TIMOD1; /* Initialize SPI port to begin
                    transmitting when DMA is enabled */
dm(SPICTL)=ustat3;


/* Set up loop to transmit data */
lcntr = LENGTH(tx_buf), do loopend until lce;
/* Retrieve data using DAG1 and send TX via SPI */
r0=dm(i4,m4);
loopend: dm(TXSPI)=r0;

_main.end:  jump (pc,0);

⌨️ 快捷键说明

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