标题: upp问题,在SYSBIOS下的应用问题 [打印本页] 作者: tulipyyf 时间: 2014-12-22 14:35 标题: upp问题,在SYSBIOS下的应用问题 下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?8 M) Y6 b* H N ~% N Void UPP_TASK(Void)8 M% @' A9 n/ w
{! k: U8 \3 d: d9 H2 w
/ v2 i$ d& D8 s
int i,j,k,target_int_count=2;( P9 b: u v- _0 t0 S
char ch[2]; N( T2 u: r4 O* D7 C+ t5 t& e& h! Q. g8 X
; |6 f" T4 k/ c$ Y( [9 y; o( o3 m' F6 c
upp_interrupt_count = 0;' w5 _+ S. i) c6 Y
upp_error_count = 0;9 F0 A, K% i. ^' R, v7 b" m
. l! \1 v5 `2 R x2 \- h4 X UARTPuts("\tResetting uPP buffers...\r\n",-2); 4 E6 f' I& [7 C% l+ Y3 \ // Initialize data buffers 6 N% f$ I: l) h% y for (i = 0; i < upp_frame_size; i++) : b* r3 C9 W- m% H" z. T {) Y+ p' r, w, N+ x+ j1 g4 L
upp_buffer_b =i;5 B' S7 o4 X5 X. L1 \& g3 \' [9 y
upp_buffer_a = 0xDEAD; 6 Y0 X/ c7 S+ [6 x( z5 Z }: i$ r% k5 X7 E3 o: s
' l/ P! b2 X. ^- A: a3 M5 m
//for(i=0;i<1024;i++) # t* j" J) V, v3 L // temp=0;" B( L6 I& e2 M- v8 D; `" Y1 K
6 ^& T8 N1 H2 r* n( l
//UPPReset(); ! {) M) N) w# Q% o5 }( b4 [6 ^ /*启动UPP DMA传输*/8 J* V0 C8 q7 n% ?, Y
UARTPuts("upp_prog_dma_i\n",-2);" C6 n N+ y6 z6 w( V+ k2 g
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;/ K- \3 P& T6 A' J1 ^$ V. X
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16); ( c6 |% {( K( U& X upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16); ' J; H# h& y2 B& x( _' @9 Z3 E! U . z4 b6 v6 T$ k+ u UARTPuts("upp_prog_dma_i\n",-2); : L5 ?, h- c1 h( Z; ~, ~& o upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;& p7 [9 X( Q2 m
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);+ Z+ U1 s+ x f# f" b, m
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16); 6 @+ g6 [# H) V" a# [% E# Q5 m6 h6 }2 L. p* f# d: p7 d
/*等待UPP传输完毕*/' D* X- G( n4 L; w" J; ~
//i=0; 1 L8 O' t8 M' c& b: ~; I //j=0;/ k: n' U$ ^" q, `) P3 d0 y9 k
while (upp_interrupt_count < target_int_count && upp_error_count == 0) : M' D& y& X3 X0 G. U! g: z. W( k {9 U# x8 E3 D% H( K
/* 测试UPP传输的同时操作普通DDR数据( \5 V3 \3 E6 R: x
temp=i;' r7 K) S( K5 [) J- _: h6 v
i++; % `1 ]; B) w( q0 N: ]# o! R5 B if(i==1024): x& e1 o# e! }* U3 U. U
{ ' a3 i% ], j3 y* s/ S9 `* d i=0;' u+ ?1 I8 ^8 A9 L I
j++;2 Y# d* v4 z L6 d2 ?1 V: Y! Z
}; r5 z7 l' E' Z Q3 h2 |
*/3 j( W* F2 T: ?4 Z+ t
+ F m! ?" [: k7 p3 ~
asm(" nop"); 5 N' L0 Z2 h3 w# r1 u) n3 | # C0 A! `0 y5 P: l6 y1 x( K5 C //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);% d. ?, J f2 z( ^- R3 P* }+ a
} ; f, f" o1 j4 J& t" P- Z& c4 K& B, ]2 H
/*检查UPP传输的数据是否正确 (loopback modes only)*/- H* [* _4 X# A" _1 P$ o" \! l' N
//UARTprintf( "i=%d\n",i); 3 `: ]4 n" D: B* _' U //UARTprintf( "j=%d\n",j); 9 H/ [9 F( L) ]! G UARTPuts("Data mismatch in buffers.\n",-2);; r3 N7 s5 K$ K6 l) f; Y
if (upp_interrupt_count == 2 && upp_error_count == 0); p8 h+ t$ x1 ]: ^
{ ; e; y! X X$ v1 p8 I8 K for (i = 0; i<upp_frame_size; i++)9 m, b6 p h% Y& D: |. a
{, _# \- W |( {6 X, [
if (upp_buffer_a != upp_buffer_b)# P5 G$ }/ D$ z1 ~+ v. d" I/ \
{3 V+ W9 V* n z; [1 F0 R) U
upp_error_count++; - ?1 `) J1 v# I9 N7 @1 J }5 g s$ j% f, A2 X9 f1 `
} . s- Q W. A( W5 a, ` } * W& f4 W: J7 Z c0 u+ H7 v9 W$ i& m+ I3 b
/* 报告通信结果*/ : n) N0 r( z5 U. a) U if(upp_error_count != 0)) j7 H' n* P- S1 ~; ~8 Z
UARTprintf( "upp_error_count=%d\n",upp_error_count);! E9 r) d5 u+ M$ f+ @% F6 T
else ! B" Q* Y( r& t5 M$ R* c' z+ v UARTPuts("uPP transfers complete!\n",-2);5 @+ Q+ K% z$ U5 f& |( Z* ] K
6 x# n7 w+ ]/ `7 \ UARTPuts("Do you want to print all the data?(y/n) ",-2); ( i- {. y% t+ b UARTGets(ch,2);- x( _2 m. g0 T3 x
UARTPuts("\n", -2);/ \( e" t1 h, y
4 J: N4 {0 p* p if(ch[0] == 'y')! j( j/ g! h6 e% y }
{ 9 V" C2 ^1 m$ v' X6 G7 ?) r /*打印全部读到的数据*/+ U( G2 Z: m6 k1 b
for(i=0; i<upp_frame_size; ) 6 \1 t/ ^; I( ?- M7 t { 2 o! g+ j* ~! d8 E0 } for(j=0; j<5; j++)2 v, {) | Y* ~8 F! ]% I
{ 1 Z. B9 o L+ \( | UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a);- J3 Z4 ?2 ~ o" _9 b
i++; 1 C% V4 V4 l# r) r: w //if(i >= 4096)5 z: E l# ?2 }
// break; ' K0 o3 {( `/ Z3 @4 J0 o 2 k3 S& D7 [9 E; L }# y3 z& p# M, U: \. h) F- x0 f4 k4 K. ?
UARTPuts("\n",-2); 3 S$ K! H6 g+ o @6 J [+ ?% T7 k/ a }! y9 ?5 p5 e8 s# `+ t' ?
} 0 q! ]+ h' v$ ? + r/ G. z$ \. ]3 z/ G! Z}' A8 M9 G, m1 v G% f( Q
t; y; n/ I# Q$ I( c ) n v/ d( g5 u) u" Y作者: tulipyyf 时间: 2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。) S+ `/ f0 H% l- v+ O* ] 作者: Lewis 时间: 2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。 + e' O0 k' z2 m, j