关常志ARM答辩报告Word文档格式.docx

上传人:b****3 文档编号:7783337 上传时间:2023-05-09 格式:DOCX 页数:22 大小:110.24KB
下载 相关 举报
关常志ARM答辩报告Word文档格式.docx_第1页
第1页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第2页
第2页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第3页
第3页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第4页
第4页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第5页
第5页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第6页
第6页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第7页
第7页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第8页
第8页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第9页
第9页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第10页
第10页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第11页
第11页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第12页
第12页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第13页
第13页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第14页
第14页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第15页
第15页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第16页
第16页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第17页
第17页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第18页
第18页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第19页
第19页 / 共22页
关常志ARM答辩报告Word文档格式.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

关常志ARM答辩报告Word文档格式.docx

《关常志ARM答辩报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《关常志ARM答辩报告Word文档格式.docx(22页珍藏版)》请在冰点文库上搜索。

关常志ARM答辩报告Word文档格式.docx

本系统采用ADS1.2进行系统程序的编写,编译,和初步调试。

4.5部分程序代码

4.5.1系统启动代码

定义系统模式堆栈的大小

SVC_STACK_LEGTHEQU32

NoIntEQU0x80

USR32ModeEQU0x10

SVC32ModeEQU0x13

SYS32ModeEQU0x1f

IRQ32ModeEQU0x12

FIQ32ModeEQU0x11

T_bit用于检测进入异常前cpu是否处于THUMB状态

T_bitEQU0x20

CODE32

PRESERVE8

AREA|subr|,CODE,READONLY

IMPORTOSTCBCur;

指向当前任务TCB的指针

IMPORTOSTCBHighRdy;

指向将要运行的任务TCB的指针

IMPORTOSPrioCur;

当前任务的优先级

IMPORTOSPrioHighRdy;

将要运行的任务的优先级

IMPORTOSTaskSwHook;

任务切换的钩子函数

IMPORTOSRunning;

uC/OS-II运行标志

IMPORTOsEnterSum;

关中断计数器(关中断信号量)

IMPORTSWI_Exception;

软中断异常处理程序

EXPORT__OSStartHighRdy

EXPORTOSIntCtxSw;

中断退出时的入口,参见startup.s中的IRQ_Handler

EXPORTSoftwareInterrupt;

软中断入口

软件中断

SoftwareInterrupt

LDRSP,StackSvc;

重新设置堆栈指针

STMFDSP!

{R0-R3,R12,LR}

MOVR1,SP;

R1指向参数存储位置

MRSR3,SPSR

TSTR3,#T_bit;

中断前是否是Thumb状态

LDRNEHR0,[LR,#-2];

是:

取得Thumb状态SWI号

BICNER0,R0,#0xff00

LDREQR0,[LR,#-4];

否:

取得arm状态SWI号

BICEQR0,R0,#0xFF000000

;

r0=SWI号,R1指向参数存储位置

CMPR0,#1

LDRLOPC,=OSIntCtxSw

LDREQPC,=__OSStartHighRdy;

SWI0x01为第一次任务切换

BLSWI_Exception

LDMFDSP!

{R0-R3,R12,PC}^

StackSvcDCD(SvcStackSpace+SVC_STACK_LEGTH*4-4)

SIntCtxSw

下面为保存任务环境

LDRR2,[SP,#20];

获取PC

LDRR12,[SP,#16];

获取R12

MRSR0,CPSR

MSRCPSR_c,#(NoInt|SYS32Mode)

MOVR1,LR

{R1-R2};

保存LR,PC

{R4-R12};

保存R4-R12

MSRCPSR_c,R0

{R4-R7};

获取R0-R3

ADDSP,SP,#8;

出栈R12,PC

保存R0-R3

LDRR1,=OsEnterSum;

获取OsEnterSum

LDRR2,[R1]

{R2,R3};

保存CPSR,OsEnterSum

保存当前任务堆栈指针到当前任务的TCB

LDRR1,=OSTCBCur

LDRR1,[R1]

STRSP,[R1]

BLOSTaskSwHook;

调用钩子函数

OSPrioCur<

=OSPrioHighRdy

LDRR4,=OSPrioCur

LDRR5,=OSPrioHighRdy

LDRBR6,[R5]

STRBR6,[R4]

OSTCBCur<

=OSTCBHighRdy

LDRR6,=OSTCBHighRdy

LDRR6,[R6]

LDRR4,=OSTCBCur

STRR6,[R4]

OSIntCtxSw_1

获取新任务堆栈指针

LDRR4,[R6]

ADDSP,R4,#68;

17寄存器CPSR,OsEnterSum,R0-R12,LR,SP

LDRLR,[SP,#-8]

MSRCPSR_c,#(NoInt|SVC32Mode);

进入管理模式

MOVSP,R4;

设置堆栈指针

{R4,R5};

CPSR,OsEnterSum

恢复新任务的OsEnterSum

LDRR3,=OsEnterSum

STRR4,[R3]

MSRSPSR_cxsf,R5;

恢复CPSR

{R0-R12,LR,PC}^;

运行新任务

__OSStartHighRdy

告诉uC/OS-II自身已经运行

LDRR4,=OSRunning

MOVR5,#1

STRBR5,[R4]

BOSIntCtxSw_1

AREASWIStacks,DATA,NOINIT,ALIGN=2

SvcStackSpaceSPACESVC_STACK_LEGTH*4;

管理模式堆栈空间

END

4.5.2系统主函数(main.c)部分代码

#defineCLEAR_INT_MARK(){EXTINT=0x02;

VICVectAddr=0x00;

}

#include"

..\ARM\config.h"

..\LED\LED.h"

..\ARM\LPC214x.h"

..\VS1003\vs1003.h"

..\CH375\CH375.h"

..\CH375\CH375HFM.h"

..\LGDP4216\LGDP4216.h"

#defineTaskStartStkLength512

#defineTaskStkLength128//定义用户任务堆栈长度

#defineTaskStartPrio1

#defineVS1003SemFlag1

#defineCH375SemFlag2

#defineLGDP4216SemFlag4

OS_STKTaskStartStk[TaskStartStkLength];

//定义用户任务打印统计信息任务的堆栈

OS_STKTerminalTaskStk[TaskStkLength];

OS_STKCH375TaskStk[TaskStkLength];

//定义用户任务U盘读取任务的堆栈

OS_STKVS1003TaskStk[TaskStkLength];

//定义用户任务音乐播放任务的堆栈

OS_STKDisplayTaskStk[TaskStkLength];

//定义用户任务显示任务的堆栈

staticvoidAppTerminalRx(INT8Udata);

INT8UAppTerminalRxMboxData;

INT8UPlayCtrlData;

OS_EVENT*AppTerminalRxMbox;

OS_FLAG_GRP*SemFlag;

uint8err;

uint8Spe[14];

uint8SpeFlag;

voidTaskStart(void*pdata);

voidTerminalTask(void*pdata);

voidCH375Task(void*pdata);

//U盘读取任务

voidVS1003Task(void*pdata);

//音乐播放任务

voidDisplayTask(void*pdata);

//显示任务

staticvoidAppTerminalRx(INT8Udata)

{

AppTerminalRxMboxData=data;

OSMboxPost(AppTerminalRxMbox,&

AppTerminalRxMboxData);

/*检查操作状态,如果错误则显示错误代码并停机*/

voidmStopIfError(unsignedchariError)

{

if(iError==ERR_SUCCESS)return;

/*操作成功*/

//printf("

Error:

0x%02X\r\n"

iError);

/*显示错误*/

while

(1){

LED_OUT_ACT();

/*LED闪烁*/

OSTimeDly(OS_TICKS_PER_SEC/10);

LED_OUT_INACT();

}

#ifLIB_CFG_INT_EN==1

voidinit_eint1(){

PINSEL0=(PINSEL0&

(~(0x03<

<

6)))|(0x03<

6);

//选择EINT1

VICVectAddr1=(unsignedlong)CH375Interrupt;

//设置中断处理方法地址

VICVectCntl1=0x20|0x0F;

//设置使用1号中断向量寄存器

VICIntEnable=0x01<

0x0F;

//开启1号中断

#endif

intmain(void)

#ifOS_VERSION>

276

#ifOS_TASK_NAME_SIZE>

0

INT8Uerr;

#endif

#endif

SCS=0x03;

TargetInit();

//初始化硬件

OSInit();

//初始化uC/OS-II

OSTaskCreateExt(TaskStart,

(void*)0,

&

TaskStartStk[TaskStartStkLength-1],

TaskStartPrio,

TaskStartStk[0],

TaskStartStkLength,

(void*)0,

OS_TASK_OPT_STK_CHK+OS_TASK_OPT_STK_CLR);

14

OSTaskNameSet(TaskStartPrio,(INT8U*)"

StartTask"

&

err);

#else

#ifOS_TASK_NAME_SIZE>

7

OSTaskNameSet(TaskStartPrio,(INT8U*)"

Start"

#endif

#endif//创建起动任务

OSStart();

return0;

//开始多任务

voidTaskStart(void*pdata)

#ifOS_CRITICAL_METHOD==3//AllocatestorageforCPUstatusregister

OS_CPU_SRcpu_sr;

#ifOS_TASK_STAT_EN>

OSStatInit();

/*DetermineCPUcapacity*/

#ifOS_VIEW_MODULE>

OSView_Init();

OSView_TerminalRxSetCallback(AppTerminalRx);

OSView_RxIntEn();

/*EnableRxInterrupts*/

SemFlag=OSFlagCreate(VS1003SemFlag|LGDP4216SemFlag,&

AppTerminalRxMbox=OSMboxCreate((void*)0);

OSTaskCreateExt(CH375Task,

CH375TaskStk[TaskStkLength-1],

CH375TaskStk[0],

TaskStkLength,

OSTaskCreateExt(VS1003Task,

VS1003TaskStk[TaskStkLength-1],

5,

VS1003TaskStk[0],

OSTaskCreateExt(TerminalTask,

TerminalTaskStk[TaskStkLength-1],

6,

TerminalTaskStk[0],

OSTaskCreateExt(DisplayTask,

DisplayTaskStk[TaskStkLength-1],

7,

DisplayTaskStk[0],

OSTaskNameSet(4,(INT8U*)"

CH375Task"

OSTaskNameSet(5,(INT8U*)"

VS1003Task"

OSTaskNameSet(6,(INT8U*)"

TerminalTask"

OSTaskNameSet(7,(INT8U*)"

DisplayTask"

#endif

while

(1){

OSTimeDly(OS_TICKS_PER_SEC/10);

voidTerminalTask(void*pdata)

#ifOS_CRITICAL_METHOD==3/*AllocatestorageforCPUstatusregister*/

OS_CPU_SRcpu_sr;

chars[100];

INT8U*key;

INT8Uerr;

pdata=pdata;

/*Preventcompilerwarning*/

while(TRUE){

key=(INT8U*)OSMboxPend(AppTerminalRxMbox,0,&

switch(*key){

case'

1'

:

sprintf(s,"

\nCPUUsage=%3u%%\n"

OSCPUUsage);

OSView_TxStr(s,1);

break;

2'

\n#Tasks=%3u\n"

OSTaskCtr);

n'

PlayCtrlData|=0x01;

OSView_TxStr("

\nNextsong.\n"

1);

default:

\n\nMicrium,Inc."

\n1:

CPUUsage(%)"

\n2:

#Tasks"

\n?

Help(Thismenu)\n"

//音乐播放任务

voidVS1003Task(void*pdata)

uint8byteIndex,data;

uint32blockIndex;

InitPortVS1003();

VS1003testbegin.\r\n"

);

//VsSineTest();

VS1003testfinish.\r\n"

SpeFlag=0;

Mp3SoftReset();

LoadPatch();

while

(1)

{

OSFlagPend(SemFlag,(OS_FLAGS)(CH375SemFlag),OS_FLAG_WAIT_SET_ALL,0,&

OSFlagPost(SemFlag,(OS_FLAGS)(CH375SemFlag),OS_FLAG_CLR,&

for(blockIndex=0;

blockIndex<

(FILE_DATA_BUF_LEN/VS1003_BLOCK_SIZE);

blockIndex++){

DREQWait();

SPIStart();

Mp3SelectData();

//SPIBatchSend((uint8*)&

FILE_DATA_BUF,(blockIndex<

5/*2^5=VS1003_BLOCK_SIZE*/),32);

for(byteIndex=0;

byteIndex<

VS1003_BLOCK_SIZE;

byteIndex++){

if(SPIRW(&

data,FILE_DATA_BUF[(blockIndex<

5/*2^5=VS1003_BLOCK_SIZE*/)+byteIndex])==FALSE){

//printf("

SPIRWerror!

.\r\n"

}

}

Mp3DeselectData();

if(SPIEnd()==FALSE){

//printf("

SPIEnderror!

if(SpeFlag==0){

//RequesttoreadSpectrumAnalyzerregister

Mp3WriteRegister(SCI_WRAMADDR,0x18,0x04);

//ReadSpectrumAnalyzerregisters

for(byteIndex=0;

14;

byteIndex++){

Spe[byteIndex]=Mp3ReadRegister(SCI_WRAM)&

63;

SpeFlag=0xFF;

}

OSFlagPost(SemFlag,(OS_FLAGS)VS1003SemFlag,OS_FLAG_SET,&

/*LED清屏程序*/

voidOLedClear(unsignedc

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2