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

📄 queue.asm

📁 基于NRF2401和SPCE061A的无线通信系统源程序
💻 ASM
字号:
.public _Queue_Init
.public _Queue_Write
.public _Queue_Read
.public _Queue_Test

.define QUEUE_SIZE	200

.RAM
.var Queue_WriteIdx
.var Queue_ReadIdx
.var Queue_Status							// 0xffff-Empty, 0-Full, others-space remained
Queue_Buf:	.dw  QUEUE_SIZE dup(?)

.code
// void Queue_Init(void);
_Queue_Init:
	push r1, r2 to [sp]
	r1 = Queue_Buf
	[Queue_WriteIdx] = r1					// Initial variables
	[Queue_ReadIdx] = r1
	r2 = 0xffff
	[Queue_Status] = r2						// Empty
	r2 = 0x0000
?L:
	[r1++] = r2								// Clear Queue
	cmp r1, Queue_Buf+QUEUE_SIZE
	jne ?L
	pop r1, r2 from [sp]
retf


// void Queue_Write(unsigned int Data);
_Queue_Write:
	int off
	r1 = sp + 3
	r1 = [r1]
	push r2 to [sp]
	r2 = [Queue_WriteIdx]
	[r2++] = r1
	cmp r2, Queue_Buf+QUEUE_SIZE
	jb ?UpdateIdx
	r2 = Queue_Buf
?UpdateIdx:	 
	[Queue_WriteIdx] = r2
	r2 = [Queue_Status]
	cmp r2, 0xffff
	jne ?UpdateStatus
	r2 = QUEUE_SIZE
?UpdateStatus:	
	r2 -= 1
	[Queue_Status] = r2
?Exit:	
	pop r2 from [sp]
	int fiq, irq
retf

// unsigned int Queue_Read(void);
_Queue_Read:
	int off
	push r2 to [sp]
	r2 = [Queue_ReadIdx]
	r1 = [r2++]
	cmp r2, Queue_Buf+QUEUE_SIZE
	jb ?UpdateIdx
	r2 = Queue_Buf
?UpdateIdx:
	[Queue_ReadIdx]	= r2
	r2 = [Queue_Status]
	r2 += 1
	cmp r2, QUEUE_SIZE
	jne ?UpdateStatus
	r2 = 0xffff
?UpdateStatus:	
	[Queue_Status] = r2
	pop r2 from [sp]
	int fiq, irq
retf

// unsigned int Queue_Test(void);
_Queue_Test:
	r1 = [Queue_Status]
retf

⌨️ 快捷键说明

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