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

📄 main.asm

📁 blackfin blink Asm code
💻 ASM
字号:
/******************************************************************************
**																			 **
**	 Name: 	BF537 EZ-KIT Blink LEDs 										 **
**																			 ** 
*******************************************************************************

Analog Devices, Inc.  All rights reserved.

File Name:		BF537_EZ-KIT_BlinkLeds.asm

Hardware:		ADSP-BF537 EZ-KIT Board Rev. 1.0
			ADSP-BF537 Rev. 0.0 Silicon

Special Connections:	SW5 on EZ-KIT Board, pins 1-4 should be ON.

Purpose:		Toggle LEDs on the EZ-KIT
				
				
********************************************************************************/

#include <defBF537.h>
#include "startup.h"

#define PB1 0x0004        // switch SW13, LED pattern 0 (PF2)
#define PB2 0x0008        // switch SW12, LED pattern 1 (PF3)
#define PB3 0x0010        // switch SW11, LED pattern 2 (PF4)
#define PB4 0x0020        // switch SW10, stop (PF5)

#define led_pattern0 0xfc0  // initial LED pattern (also PB1)
#define led_pattern1 0x540  // LED pattern after pressing PB2
#define led_pattern2 0xcc0  // LED pattern after pressing PB3

#define delay 0x4000000

.section L1_code;
.global _main;

_main:
	// configure programmable flags
	// set port f function enable register (need workaround)
	p0.l = lo(PORTF_FER);
    p0.h = hi(PORTF_FER);
    r0.l = 0x0000;
    r1 = w[p0] (z);		//#22 work-around, read PORT_MUX before writing
	ssync;
    w[p0] = r0;			//#22 work-around: write it a few times
    ssync;
    w[p0] = r0;			//#22 work-around: write it a few times
    ssync;

	// set port f direction register
    p0.l = lo(PORTFIO_DIR);
    p0.h = hi(PORTFIO_DIR);
    r0.l = 0xFC0;
    w[p0] = r0;
    ssync; 
        
   	// set port f input enable register
    p0.l = lo(PORTFIO_INEN);
    p0.h = hi(PORTFIO_INEN);
    r0.l = 0x3C;
    w[p0] = r0;
    ssync; 
    
    // set port f polarity register
    p0.l = lo(PORTFIO_POLAR);
    p0.h = hi(PORTFIO_POLAR);
    r0 = 0x0;
    w[p0] = r0;
    ssync;
 
	// set port f clear register
    p0.l = lo(PORTFIO_CLEAR);
    p0.h = hi(PORTFIO_CLEAR);
    r0.l = 0xFC0;
    w[p0] = r0;
    ssync;	

	p1.l = lo(PORTFIO);
	p1.h = hi (PORTFIO);
	r4 = w[p1](z);     		// read value of LEDs
	r3 = 0xfc0;         	// mask of bits 11-6
    r4 = r4 & r3;      		// preserve bits 11-6 
    r2 = led_pattern0; 		// set initial LED pattern

loop1:
	r2 = r2 & r3;      		// mask of bits 11-6
	r2 = r4 | r2;      		// value to write to LEDs

	p0.l = lo(PORTFIO);
	p0.h = hi (PORTFIO);
    w[p0] = r2;				// write to LEDs
    ssync; 
    
	r2 = ~r2;          		// toggle the LED value
	r5 = 0x0;          		// clear the stop flag
	call DELAY;

read_pf:
	p0.l = lo(PORTFIO);
	p0.h = hi (PORTFIO);
	r0 = w[p0](z);    		// read port f data register

// check if PB1 was pressed
pb1_check:
	r1 = PB1;
	r1 = r0 & r1;
	cc = r1 == 0x0;
	if cc jump pb2_check;    // PB1 not asserted
    r2 = led_pattern0;       // PB1 asserted (change LED pattern)
    r5 = 0x0;                // clear the stop flag    
        
// check if PB2 was pressed
pb2_check:
    r1 = PB2;
	r1 = r0 & r1;
	cc = r1 == 0x0;
	if cc jump pb3_check;    // PB2 not asserted
    r2 = led_pattern1;       // PB2 asserted (change LED pattern)
    r5 = 0x0;                // clear the stop flag

// check if PB3 was pressed
pb3_check:
    r1 = PB3;
	r1 = r0 & r1;
	cc = r1 == 0x0;
	if cc jump pb4_check;    // PB3 not asserted
    r2 = led_pattern2;       // PB3 asserted (change LED pattern)
    r5 = 0x0;                // clear the stop flag 

// check if PB4 was pressed
pb4_check:
	r1 = PB4;
	r1 = r0 & r1;
	cc = r1 == 0x0;
	if !cc jump stop_flag;   // PB4 asserted
	// if here then no switch has been pressed
	cc = r5 == 0x0;      	// check stop flag status
	if cc jump loop1;     	// stop flag = OFF 
	jump read_pf;         	// stop flag = ON
        
stop_flag:
    r5 = 0x1;             	// set the stop  flag
	jump read_pf;         	// check for PB to re-start
	
DELAY:
	p2.l = lo(delay);
	p2.h = hi(delay);
	lsetup(delay_loop, delay_loop) lc0=p2;
	delay_loop: nop;
	rts;
	
_main.END:	

⌨️ 快捷键说明

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