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

📄 spidisp.s

📁 SPI总线的实例程序
💻 S
字号:
/****************************************************************************** 
*文件名:SPIDISP.S
*使用硬件SPI接口输出控制LED显示。(硬件:74HC595输出控制数码管显示)
******************************************************************************/
				.INCLUDE		"LPC2294.INC"
			
				.EQU		SPI0_BASE,	0xE0020000
		  		.EQU		HC595_CS, 	(1<<29) /* P0.29口为74HC595的片选 */

		    	.text  						 	/* 声明程序代码块 */
				.arm
				.global main
            	.func   	main
								
		
main: 			LDR     SP,=0x40003F00          /* 设置堆栈指针SP */
           		LDR     R0,=PINSEL0             /*设置SPI0接口效 */
            	MOV     R1,#0x00005500          
            	STR     R1,[R0]                 
            	LDR	R0,=PINSEL1
            	MOV	R1,#0x00000000
            	STR	R1,[R0]
            	LDR     R0,=IO0DIR              /*设置HC595片选控制口为输出 */
            	MOV     R1,#HC595_CS
            	STR     R1,[R0] 
                
            	/*设置SPI接口 */
            	LDR     R0,=SPI0_BASE
            	MOV     R1,#0x52                
            	STR     R1,[R0,#0x0C]			/*S0PCCR=0x52,设置SPI时钟 */
            	MOV     R1,#0x30                
            	STR     R1,[R0] 				/*S0PCR=0x30,设置SPI接口模式,MSTR=1,CPOL=1,CPHA=0,LSBF=0 */

               /*使用SPI进行数据发送(查表) */
                LDR     R4,=DISP_TAB
MAIN_LOOP:      MOV     R5,#0
MAIN_LOOP1:     LDR     R2,[R4,R5,LSL #2]       /*查表取得显示数据 */
 
                LDR     R0,=IO0CLR               /*HC595_CS=0 */
                MOV     R1,#HC595_CS
                STR     R1,[R0]
                BL      MSEND_DAT               /*发送显示 */
                LDR     R0,=IO0SET               /*HC595_CS=1 */
                MOV     R1,#HC595_CS
                STR     R1,[R0]
                
                BL      DELAYS                  /*软件延时 */
                        
                ADD     R5,R5,#1
                CMP     R5,#0x0F
                BLS     MAIN_LOOP1
                B       MAIN_LOOP
                
                
DISP_TAB:       .long 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90
                .long 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E

/******************************************************************************
*名称:MSEND_DAT
*功能:通过SPI接口向74HC595发送一字节数据
*入口参数:R2          待发送的数据,低8位有效
*出口参数:R1          接收到的从机数据
*占用资源:R0、R1、R2
******************************************************************************/
MSEND_DAT:
                LDR     R0,=SPI0_BASE             
                LDR     R1,[R0,#0x04]           /*读取S0PSR,清除各种标志 */
                
                STR     R2,[R0,#0x08]           /*发送数据 */
MSEND_DTL1:     LDR     R1,[R0,#0x04]                   
                ANDS    R1,R1,#0x80
                BEQ     MSEND_DTL1
                
                LDR     R1,[R0,#0x08]           /*接收从机的数据 */
                MOV     PC,LR
                
/******************************************************************************                
*名称:DELAYS
*功能:软件延时
*入口参数:无
*出口参数:无
*占用资源:R7
******************************************************************************/
DELAYS:
                MOV     R7,#0x000FF000        	 /* 延时参数 */
DELAYS_L1:      SUBS    R7,R7,#1                /* R7=R7-1 */
                BNE     DELAYS_L1              	 /* 判断R7-1结果是否为0,若不为0则跳转 */
                MOV     PC,LR                   /* 返回 */
                
                .ALIGN                           /* 数据字对齐 */
                .LTORG                           /* 声明文字池 */
                
                .END



⌨️ 快捷键说明

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