嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 p' M# S, g+ o6 G. n9 V2 V
Void UPP_TASK(Void)
. Z9 l# P" b1 j( Z: f
{
% Y, k# T1 M1 M: J: J& c: S6 h0 x8 d
% ]" u Z1 ^9 J
int i,j,k,target_int_count=2;
9 |4 E0 V7 @ G6 Z- N2 Y: W
char ch[2];
' [& Y( m' K" A# W3 L0 h8 ?+ q
# ^, R5 O6 g- i/ X
& q* d1 Q4 t/ F" M+ M' O3 B! d
5 @% K3 q7 B3 `3 ]5 b
upp_interrupt_count = 0;
6 ^$ U& k$ `7 K' J# k
upp_error_count = 0;
4 u" y; J0 @7 G5 G* _8 }
/ o! w" f3 A4 g3 P) W! K- K& {% w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
9 Z6 v2 a7 N# ^3 j
// Initialize data buffers
8 u/ d; x8 x! y3 ?8 w
for (i = 0; i < upp_frame_size; i++)
( ?9 [# P, o8 O% n
{
1 \' Y5 K t, W2 a3 |; B( Q$ _
upp_buffer_b
=i;
4 D3 X" t, T' {/ }7 r* [
upp_buffer_a
= 0xDEAD;
2 a5 G% N4 _7 A4 ?
}
C1 G4 a& ? L& Q. J4 U
& g" n5 V2 W( N s8 v; n9 e8 R2 N
//for(i=0;i<1024;i++)
7 c3 }7 Z5 ~& \! l
// temp
=0;
, x( W) z5 f5 t
6 D6 d) K. u7 s2 \- V
//UPPReset();
9 ~# B& g0 Q1 e, Q% m! E. s6 X
/*启动UPP DMA传输*/
1 b6 {7 n s/ G5 n5 S4 g
UARTPuts("upp_prog_dma_i\n",-2);
" ]$ _8 l2 }5 E' a( v
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
3 x5 r4 v- ~9 Q( o5 [2 _$ ]
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 R0 d! o) D1 ^( W
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 d+ Z4 p4 L( W {8 T' I
& E$ o+ r" I; @' h; U
UARTPuts("upp_prog_dma_i\n",-2);
9 k3 i, K& J# U' W( E; B# w
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 b9 o7 N( H2 b
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& _$ @0 U2 h }' @$ ^/ N
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
D' `7 {* h0 m! _) J9 F F% |
0 X9 {- b* I2 y! R! B. O9 ?* \6 f
/*等待UPP传输完毕*/
& {' V" |, D1 p; |
//i=0;
/ E+ f/ f$ a) L
//j=0;
, |! O9 E* P6 j' N
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
- k( q7 q" l* a9 N& a0 ^& v
{
; i# C' O) W, Y+ I( {- @
/* 测试UPP传输的同时操作普通DDR数据
, p0 i* }8 K1 G& m. E7 ~& T8 z4 @9 L
temp
=i;
* V g2 }" i F3 q6 I7 ^3 H
i++;
: i$ f. ^- v" K5 Y
if(i==1024)
2 p. p: k, W9 H. e5 e' R* A
{
3 z7 ^" j) t- K. c" H) p
i=0;
) }3 S- P- g8 p8 s- e7 T
j++;
3 e' A/ J+ ~& U8 e- `7 {/ J
}
* H8 q, W4 ~* q; E L. R4 ^7 }
*/
8 @/ b# o! _/ B3 b4 o: j
) a" S/ r8 K N
asm(" nop");
) N% D5 @# n$ z& L3 P
4 |- [) j: n) n7 \4 f$ T
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% @6 x! e7 h3 B& w8 C- O
}
7 P e- F7 X+ e
0 ]/ n m+ j3 A2 L$ K, S
/*检查UPP传输的数据是否正确 (loopback modes only)*/
3 x! N; ~! D* ~5 B
//UARTprintf( "i=%d\n",i);
( K! K+ ?+ Q2 C' e# d% W- D! f
//UARTprintf( "j=%d\n",j);
$ r+ H3 @/ N1 J! {; R0 d
UARTPuts("Data mismatch in buffers.\n",-2);
. t* y) N( k5 w4 E ~8 c! ?
if (upp_interrupt_count == 2 && upp_error_count == 0)
6 W& l! _* ~; n* W$ L4 k
{
$ d& b8 [' p4 `
for (i = 0; i<upp_frame_size; i++)
" V8 K8 D- `$ E6 [
{
: I! g: i4 V9 y
if (upp_buffer_a
!= upp_buffer_b
)
$ H9 b4 k0 |* B( `8 ]
{
# U/ E3 l/ s+ f' Q; r* }" {% G- C
upp_error_count++;
; o5 O$ l0 W8 N, J& L0 k
}
; m& R* \6 {2 @0 X8 P& j1 ^$ g: }
}
$ H. D- r |) N7 c; \$ p
}
! a$ t9 D. x. o
0 H0 S5 ~6 U" F7 V) T
/* 报告通信结果*/
! K* D2 O; d, Y6 A8 t; U9 n& n7 ?" D
if(upp_error_count != 0)
2 f: S: X% {2 g% J( _1 S
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& _: [2 {2 K. O6 U
else
$ [" X. |% ^* G; Z
UARTPuts("uPP transfers complete!\n",-2);
( B [2 _( Q; b# ~# R
0 {! b8 j- R# w+ H
UARTPuts("Do you want to print all the data?(y/n) ",-2);
! U6 A2 ^2 d4 p7 a$ { k& Q
UARTGets(ch,2);
' T j* z+ g$ I r5 h6 U, |
UARTPuts("\n", -2);
0 C+ c8 c' x O4 s5 M/ r
, H0 `6 T# x6 j Y' k
if(ch[0] == 'y')
9 Z" F+ Q0 @* q1 j& g
{
& P6 R( C$ u' T) m" u
/*打印全部读到的数据*/
; C' u X5 |9 |. u) d
for(i=0; i<upp_frame_size; )
V- Y0 F+ x& J
{
( B7 i+ W: q# u B: Y, r. q
for(j=0; j<5; j++)
1 _. M$ ^/ U" X) l" i7 S
{
/ E7 N" a' o1 ^+ S2 ]; W1 V
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
6 ?, B3 ~' e4 s4 I- N% @3 B
i++;
+ ]. K5 Q2 }) i
//if(i >= 4096)
" z @. G' w* T7 r2 Z- K% _
// break;
% ^' q* @9 q9 f: G8 N9 B$ g9 [
4 f# G# z: k' L2 v9 q, Y; o
}
: e3 H* x& Z0 l: J2 T8 v t1 C
UARTPuts("\n",-2);
: j+ H% x- t+ _4 v
}
7 l9 s/ R, a ?. }0 ~. |
}
. f/ h9 c1 Q( B# j( j
/ j% ^; H1 L& f# i9 N* s- H; q$ s! ]
}
, z3 v: w$ E0 G
9 c4 n2 n' _- z7 X9 x9 H. q
* \; s) L( Q! }# z% Z( J
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ g5 A/ \3 |; z% `: y* E
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
& Z* h' b( Y2 U; g
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4