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

📄 main.c

📁 ARM7TDMI软件模拟器
💻 C
字号:
/*
**ucosII for simuCPU,you can only free use it for personal study purpose!
**www.MShowTec.com for more information.
**lmjx,Email:limiao@yeah.com,All Right Reserved.
**/


#define MAIN_GLOBALS
#include "includes.h"

#include <stdio.h>
#include <stdarg.h>

#define ASIC_BASE  	 	 	0x02000000
//SYSTEM MANAGER REGISTERS 
#define ARM7_SYSCFG	     	(ASIC_BASE+0x00)
#define ARM7_MEMMAP  	 	(ASIC_BASE+0x04)
 

// INT controller registers
#define ARM7_INTMODE 	 	(ASIC_BASE+0x40)
#define ARM7_INTPEND 	 	(ASIC_BASE+0x44)
#define ARM7_INTMASK 	 	(ASIC_BASE+0x48)
#define ARM7_INTOFFSET   	(ASIC_BASE+0x4c)

// Timer Registers
#define ARM7_TMOD			(ASIC_BASE+0x80)
#define ARM7_TDATA			(ASIC_BASE+0x84)
#define ARM7_TRELOAD		(ASIC_BASE+0x88)
#define ARM7_TCNT			(ASIC_BASE+0x8c)

// UART Registers
#define ARM7_UCON			(ASIC_BASE+0xc0)
#define ARM7_USTAT			(ASIC_BASE+0xc4)
#define ARM7_UTXBUF			(ASIC_BASE+0xc8)
#define ARM7_URXBUF			(ASIC_BASE+0xcc)


OS_STK TaskStartStk1[256];
OS_STK TaskStartStk2[256];
OS_STK TaskStartStk3[256];
OS_STK TaskStartStkCli[1024];

OS_EVENT *ioSem;

char ioStrBuf[128],iobuf[128],iocnt=0;

void printk(const char *fmt,...);

int in(char*p)
{
	unsigned char err,i=0;
	OSSemPend(ioSem,0,&err);
	while(ioStrBuf[i]){
		*p++ = ioStrBuf[i++];
	}
	*p = 0;
	return i;
}


int out(char*buf)
{
	int i = 0;
	while(buf[i]!= 0){
		*(unsigned long*)(ARM7_UTXBUF) = buf[i++];
	}
	return i;
}


void printk(const char *fmt,...)
{
	char buf[1024];
    va_list argptr;

    va_start(argptr, fmt);
    vsprintf(buf,fmt, argptr);
    va_end(argptr);
    
    out(buf);
	    
}

void int_ext0()
{
	*(unsigned long*)ARM7_INTPEND &= ~0x01;
	out("ext0\r\n");
}

void int_ext1()
{
	*(unsigned long*)ARM7_INTPEND &= ~0x02;
	out("ext1\r\n");
}

void int_uarutTX()
{
	*(unsigned long*)ARM7_INTPEND &= ~0x04;
	out("uarutTX\r\n");
}

void int_uarutRX()
{
	char c,i;
	
	*(unsigned long*)ARM7_INTPEND &= ~0x08;
	c = (char)(*(unsigned long*)ARM7_URXBUF);
	
	if(c == 13){
		iobuf[iocnt] = 0;
		for(i=0;i<=iocnt;i++){
			ioStrBuf[i] = iobuf[i];
		}
		iocnt = 0;
		
		*(unsigned long*)ARM7_UTXBUF=(13);
		*(unsigned long*)ARM7_UTXBUF=(10);
		
		OSSemPost(ioSem);		
		return;
	}
	
	 iobuf[iocnt++] = c;
	 *(unsigned long*)ARM7_UTXBUF=(c);
}

void int_timer()
{
	*(unsigned long*)ARM7_INTPEND &= ~0x10;
	OSTimeTick();
}

void(* const InterruptRoutTableIRQ[])(void) = {
	int_ext0,
	int_ext1,
	int_uarutTX,
	int_uarutRX,
	int_timer,
};


void InterruptHandler_IRQ()
{	

	InterruptRoutTableIRQ [(*(unsigned long*)ARM7_INTOFFSET)]();

}

void InitTimerUARUT(void)
{
	*(unsigned long*)ARM7_INTMASK = 0;
	*(unsigned long*)ARM7_TDATA = 10;	/* 100ms */
	*(unsigned long*)ARM7_TRELOAD = 10;
	*(unsigned long*)ARM7_TCNT = 0;
	*(unsigned long*)ARM7_TMOD = 3;
	
	*(unsigned long*)ARM7_UCON = 1;
}

void TaskStart1(void *yydata)
{
	//u16 a=0;
	
	yydata = yydata;

	//memset(tmp,'a',200);
	printk("* %s V%d.%d *\r\n","uCOS-II",OSVersion()/100,OSVersion()%100);
	
	out("Task 1 suspend itself\r\n");
	OSTaskSuspend(OS_PRIO_SELF);  
	while(1)
	{		
		//OSTimeDly(2*OS_TICKS_PER_SEC);
	}
}

void TaskStart2(void *yydata)
{
	//u16 a=0;
	yydata = yydata;
	
	out("Task 2 suspend itself\r\n");
	OSTaskSuspend(OS_PRIO_SELF);  
	while(1)
	{
		//OSTimeDly(1*OS_TICKS_PER_SEC);
	}
}

void TaskStart3(void *yydata)
{
	//u32 a=0;
	yydata = yydata;

	out("Task 3 suspend itself\r\n");
	OSTaskSuspend(OS_PRIO_SELF);  
	while(1)
	{

		//OSTimeDly(2*OS_TICKS_PER_SEC);
    }
}

void TaskStartCli(void *yydata)
{
	//u32 a=0;
	extern void CliMain(void);
	yydata = yydata;

	out("cli task running!!\r\n");
	
	ioSem = OSSemCreate(0);

	CliMain();
}

int main(void) 
{
	
	OSInit();

	OSTaskCreate(TaskStart1, NULL, &TaskStartStk1[255],2);
	OSTaskCreate(TaskStart2, NULL, &TaskStartStk2[255],3);
	OSTaskCreate(TaskStart3, NULL, &TaskStartStk3[255],4);
	OSTaskCreate(TaskStartCli, NULL, &TaskStartStkCli[1023],5);


	InitTimerUARUT();
	

	OSStart();
	
	return 1;
}



⌨️ 快捷键说明

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