嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: S* E% v8 L2 z, `8 i/ U& f8 A
Void UPP_TASK(Void)
8 G- i8 _1 ?7 k: K
{
6 C/ n8 o2 o5 s% y" T# c. w
2 W8 {6 w; B8 D- |" k: b7 V4 M1 V
int i,j,k,target_int_count=2;
! u6 Z, o& R& o0 Z2 o5 o
char ch[2];
, }- U/ [0 Y- O; E( d
$ W$ a" L# n& [: Y
% ^% @% X" ?' R
% L2 U% u0 ]5 g$ ]# ^# W. M
upp_interrupt_count = 0;
6 V. w. v& Q: \7 Z- e
upp_error_count = 0;
) |) [6 }& V8 R3 ?$ S# K8 Q. d
( z& C: q1 I" p5 s, m! Z3 |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" l- P- D5 u& h, [
// Initialize data buffers
, @7 O6 e' T8 D5 g! ? }9 T
for (i = 0; i < upp_frame_size; i++)
* \, n8 y: }/ c8 {1 Q9 D
{
) l2 P0 B4 m0 F& [4 Y0 M
upp_buffer_b
=i;
: m2 a. a4 P: V: N; _+ A
upp_buffer_a
= 0xDEAD;
6 y& A- w# J7 o( u( P" j
}
" l6 O# q3 j( @2 W8 L
3 o& C) R' Z, ?* }) v
//for(i=0;i<1024;i++)
0 f3 f" Q6 a( H. X! D
// temp
=0;
2 g- K1 _8 j) M1 r0 n9 B7 f
3 d+ M. m: d* t' K! ^# L
//UPPReset();
4 Z! i5 V+ e! t" z: z
/*启动UPP DMA传输*/
" s |; Y) T+ Y/ L) \# ~
UARTPuts("upp_prog_dma_i\n",-2);
" j$ I6 @% z0 [% T' I
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
' B4 T) u- Z* F% x) k
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 r. k+ v. ]0 N6 z
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: r) B; Y3 J5 I" L0 `$ M
1 _; P" ^1 r! I5 B4 w8 l4 }1 _
UARTPuts("upp_prog_dma_i\n",-2);
R( L4 @! |6 k
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ L$ m; l5 W7 A1 a6 y. @
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ \- i; q8 l+ T6 r+ p" w
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 B T- o+ c- a7 H
2 Z1 e: L( B) t8 K, r
/*等待UPP传输完毕*/
% R$ Y. x' x: N9 {6 T
//i=0;
/ B a! F; K. ~0 F" u
//j=0;
5 ^1 |( K- g7 z$ O) ]
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
7 {: W" R# B+ r1 d
{
6 g) F- P4 ^& |. T
/* 测试UPP传输的同时操作普通DDR数据
: Y/ E% w" M2 T. O. z: A6 y% }- V% `
temp
=i;
/ o( ?* t$ F. a9 Q* v3 U# z
i++;
, _1 t# r+ S) ~( S/ x$ B
if(i==1024)
9 b/ P) n3 U( ]. e. M$ s, q
{
2 O" i$ z* f9 O2 e
i=0;
+ A9 [; s) V( |5 E5 J6 b
j++;
, p: A3 p& K | c& d
}
0 S7 R L4 v* S; p7 \0 y/ M: z1 ]
*/
6 G4 X, A! e' r- Y; e
5 w4 U& J6 ~5 }. |4 I% `
asm(" nop");
& u8 l4 m# h8 m* o9 \" M
& {7 ?4 q, i4 \# J9 h
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( g% m! w; h+ \* {4 ^
}
7 z% L1 H5 A" L0 g0 \( d7 F
, f. P1 [3 {: ?$ Z" }
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, r1 s$ H/ }6 a/ H
//UARTprintf( "i=%d\n",i);
& N2 L0 j, w; g+ h X
//UARTprintf( "j=%d\n",j);
. P: _$ m; F3 s8 `, k
UARTPuts("Data mismatch in buffers.\n",-2);
8 P o3 ~' } S% b9 m; A% o
if (upp_interrupt_count == 2 && upp_error_count == 0)
( O3 ~* m8 {9 s4 v
{
; |2 u$ ]& Q$ o& x+ g& @! Z/ f
for (i = 0; i<upp_frame_size; i++)
2 k6 B6 e. a3 J
{
3 o9 A" I* o9 ^; v9 v! q' v7 c- Z
if (upp_buffer_a
!= upp_buffer_b
)
% q. l$ `: H, A
{
, g& | z, y6 U0 B: q3 F9 H* x
upp_error_count++;
5 ?: |: A6 z4 j4 D5 Q
}
8 e$ g& U, K$ X5 }3 _5 s2 X
}
# u' s9 z+ O Z6 c! k! i. j# O
}
. ` |$ B- w; O' M. W) }! ]+ a
0 V a( N$ ?: r, s# Y2 P
/* 报告通信结果*/
: m8 f: @" K; Z* X7 X% _$ K
if(upp_error_count != 0)
2 k5 R2 X% h, p5 W
UARTprintf( "upp_error_count=%d\n",upp_error_count);
y: O5 I: h1 Z3 {2 c& g/ B
else
) L" c4 |0 h& R# F* ~
UARTPuts("uPP transfers complete!\n",-2);
8 R+ ~- R- a! z, b M* i% f% z8 m
1 u5 G$ ]9 ]7 }; Z. e' a
UARTPuts("Do you want to print all the data?(y/n) ",-2);
$ M" f* D6 z9 K, x
UARTGets(ch,2);
# \8 ~( j( W4 u# }% r$ o9 q
UARTPuts("\n", -2);
8 K' O p8 t$ r ^2 u6 c) F
O4 I: ]2 W$ e. k
if(ch[0] == 'y')
/ B$ x* B& A ^9 `5 Q7 w3 [
{
$ ]7 q6 Y5 L2 j' V% N; f7 J
/*打印全部读到的数据*/
4 m3 D0 j" q0 v4 A: n
for(i=0; i<upp_frame_size; )
3 B+ k( Q, \7 q% H9 b- k( @9 i
{
/ s O; b3 \1 j% k) X) L
for(j=0; j<5; j++)
" S; v6 y# h) N" g, D
{
" k6 ~% @6 P# e" D9 \, e! T
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! t7 y9 U# a9 }# a' r( U7 a
i++;
8 [- ^* I3 L* l* y: N7 i
//if(i >= 4096)
' \$ j' k2 I/ F6 x: h9 g( L
// break;
4 c; H8 j/ Y4 w% J: C r' m
+ e% f6 z5 t6 z) E
}
0 w- \) W- y+ K2 l3 d
UARTPuts("\n",-2);
* z; ~% p; Q, A! q' `6 a
}
! m4 |9 Z5 c" j% C4 ]
}
) f6 o7 a! P. c
' U* D! W% t8 c! G4 a* h
}
/ N! o7 j" V6 z$ ?5 _) g
( `/ t* U/ I. H0 _- f9 d8 E/ z. T
% _4 Y. H2 x2 p/ w; K$ ]- F
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
" I0 j( b: [3 o' A* _( O+ G9 A
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
6 _2 ]* l; D8 ?7 p: T
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4