|
//****************FIQ部分的程序****************************<br />extern void Pulses(void);<br /><br /> void FIQ_Exception(void)<br />{<br /> <br /> Pulses(); // change it to your code 这一句替换为自己的代码<br /> <br /> }<br /><br />/*********************************************************/<br /><br /><br /><br />下面是Pluses部分的程序<br />;-------------Pulses()------------------------------------<br />AREA AsmFunc, CODE, READONLY<br /> EXPORT Pulses<br /> IMPORT send_data<br />Pulses<br /> STMFD SP!, {R0-R10, LR} ;入栈<br /> <br /> LDR R10,=send_data<br /> LDR R0, [R10]<br /> MOV R2, #0x10 ;LR数据长度<br /> MOV R3, #0x200 ;P0.9 MCK<br /> MOV R1, #0x10 ;P0.4 DIN<br /> LDR R9, =0xE0004000 <br /> LDR R8, =0xFFFFF030 <br /> MOV R7, #0<br /> <br /> LDR R4, =0x3FFFC01C ;FIO0CLR0<br /> LDR R5, =0x3FFFC018 ;FIO0SET0<br /> <br /> MOV R6, #0x80 ;P0.7 WS <br />;WS=0 16位循环 <br />LOOP <br /> <br /> STR R3, [R4] ;MCK=0<br /> STR R6, [R4] ;WS=0<br /> <br />LOOP3<br /> STR R3, [R4] ;MCK=0<br /> TST R0, #0x80000000<br /> BNE LOOP1<br /> STR R1, [R4] ;DOUT=0<br /> B LOOP2<br /> <br />LOOP1<br /><br /> STR R1, [R5] ;DOUT=1<br /> <br />LOOP2 <br /> <br /> MOV R7, R0,LSL #1<br /> MOV R0, R7<br /> STR R3, [R5] ;MCK=1<br /> SUBS R2, R2,#1<br /> BHI LOOP3<br /> MOV R2, #0x10<br /> LDR R0, [R10]<br /> MOV R10,R0,LSL #16<br /> MOV R0, R10<br />;WS=1 16位循环 <br />LOOP_SMALL<br /> STR R3, [R4] ;MCK=0<br /> STR R6, [R5] ;WS=1<br /> <br />LOOP_SMALL3<br /> STR R3, [R4] ;MCK=0<br /> TST R0, #0x80000000<br /> BNE LOOP_SMALL1<br /> STR R1, [R4] ;DOUT=0<br /> B LOOP_SMALL2<br /> <br />LOOP_SMALL1<br /> STR R1, [R5] ;DOUT=1<br />LOOP_SMALL2<br /> <br /> MOV R7, R0,LSL #1<br /> MOV R0, R7 <br /> STR R3, [R5] ;MCK=1<br /> SUBS R2, R2,#1<br /> ;CMP R2, #0<br /> BHI LOOP_SMALL3<br />;循环结束<br /> MOV R7, #0x01<br /> STR R7, [R9]<br /> <br /> MOV R6, #0x00<br /> STR R6, [R8]<br /> <br /> LDMFD SP!, {R0-R10, LR} ;返回<br /> <br /> END<br />;--------------------------------------------------------
|