嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ y5 e2 m/ E, a
Void UPP_TASK(Void)
0 d. k! g" O( t* q
{
G, E% `* V9 q M, W/ S, b y1 p
$ n% _/ ?! P: A' ]$ t
int i,j,k,target_int_count=2;
# t* T6 y Y7 j. S+ p2 P
char ch[2];
. @; S9 M# b5 U8 w& B: R$ C
% V# ] E5 r# h( R( B: n8 E, J( j
3 |0 u7 \) B6 U" S0 i- ~# O
$ H0 n3 I* t& O1 Z2 M# `2 q, W5 V
upp_interrupt_count = 0;
. T' m; i- f0 J
upp_error_count = 0;
8 E# m- }; M" Q& y" |2 Q7 d
) B$ M# ]0 n8 B' b6 ?# Z
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' G7 l% W0 k) z
// Initialize data buffers
; c% K( Y5 d+ O
for (i = 0; i < upp_frame_size; i++)
: i/ v; Q& d& D! _, H: \' _
{
0 d2 z7 C* @% [5 q/ y2 R, o
upp_buffer_b
=i;
8 w2 ~8 v% e4 @ O( L, j
upp_buffer_a
= 0xDEAD;
" Z( [/ V5 Z9 _! I0 F% ^4 e% Y
}
5 R1 u0 U% `. c
% u' o3 e( ?' ^( s# |. _& l$ y' d- _
//for(i=0;i<1024;i++)
+ w W1 y- [# r/ }5 b- z/ f' F
// temp
=0;
/ w8 n e3 f: R
9 i6 G$ X3 K- ?! q3 t
//UPPReset();
5 S0 ~3 T1 F+ {. d9 I6 r @ I
/*启动UPP DMA传输*/
$ J" s2 H) }6 Q6 c
UARTPuts("upp_prog_dma_i\n",-2);
3 \ e$ e0 u) W' {) j8 r( K
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# @0 U# _8 ~8 n7 t O
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
- X; V2 D4 Z7 M& ? d# r
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
% j* |/ b( j1 e _+ r1 Q) N* |
/ }3 |+ {2 M# V3 V# @
UARTPuts("upp_prog_dma_i\n",-2);
' d1 O0 d: O8 C# q' l6 X( i, l+ }
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
. P) ` C3 H2 s6 F8 R( K
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 E L0 @$ o2 V& _/ g, K
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; q/ Z1 u( y. e1 \5 y
, A, M) ?* S& l$ D8 M2 P! ?
/*等待UPP传输完毕*/
3 a# C! B! ]7 [7 L
//i=0;
0 e3 j5 M: y" }. [ k
//j=0;
, A$ j1 i; f( P$ I( P- T/ t2 B2 o
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 A" S, a8 m" ]. r, U8 Y
{
# D1 y! b9 b$ q/ v# d
/* 测试UPP传输的同时操作普通DDR数据
0 r* n+ p" \5 p$ w% j' z& e
temp
=i;
$ g# \9 g0 ]9 t2 r; j
i++;
* x) a+ u- B6 m' X6 r
if(i==1024)
- v( P x/ g5 i& z6 {6 \. T
{
: C0 U0 {! a, v6 \
i=0;
* x1 ], Y% F0 w3 [8 R2 D( I9 R: Y6 d
j++;
5 F. w! r* V' n' @0 f) s
}
~, _, C1 X1 P% q+ y$ V; h; ^
*/
, }& b9 o. s9 e+ ^9 F
/ ?4 d' k* F& u- x9 |2 S
asm(" nop");
+ \$ b& G1 L: T
}2 P6 j, t" B' Z" \
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
! v! j0 f. r& z! y/ E4 H
}
: s/ `, I% }! `$ Q
3 ?. V0 o( q) W) h* L
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 n, S$ a2 |4 f4 ?$ N% \- R
//UARTprintf( "i=%d\n",i);
! a4 F# z) a, o- a
//UARTprintf( "j=%d\n",j);
0 ]2 e5 A5 h& O- l1 a
UARTPuts("Data mismatch in buffers.\n",-2);
/ i# A; C: {% O6 @9 p' X
if (upp_interrupt_count == 2 && upp_error_count == 0)
$ d @! }+ i" O0 S4 V2 q1 H, z
{
2 p4 h7 V9 k. l5 W0 J6 R# e
for (i = 0; i<upp_frame_size; i++)
$ \+ w- a2 a0 z7 o! U: L: Q4 m
{
1 T( ?& K% y+ e
if (upp_buffer_a
!= upp_buffer_b
)
4 E b2 B( ^: C/ u: r3 C
{
. G& f- }1 |- s
upp_error_count++;
* |$ _3 N* a" k- v7 n$ N
}
( Z `; m: ~7 [+ D) p
}
) m6 r: [1 D9 b+ w# T
}
8 s5 k0 m& l+ U
, {' C6 B& i( b' ?/ G4 O
/* 报告通信结果*/
; e. U: R5 u) Y6 S
if(upp_error_count != 0)
. z5 D8 u1 ]3 n" O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
! r% x. }2 \/ D. C
else
1 V4 V/ Z8 k% L8 s
UARTPuts("uPP transfers complete!\n",-2);
- q, j! S2 b( k H' w p
( t- J1 \) ~& u* a9 L
UARTPuts("Do you want to print all the data?(y/n) ",-2);
3 k; \0 z- b. P, _+ H9 o) G0 M
UARTGets(ch,2);
+ h9 d t" [* @: S
UARTPuts("\n", -2);
3 M+ ^$ [0 Z- w8 H
. M5 E) W) \! e+ u! }
if(ch[0] == 'y')
$ F7 `+ M9 d* g& s' [3 T- E! z2 ~
{
' Y! \% G( ]* \5 [5 U2 @+ c3 L
/*打印全部读到的数据*/
3 J8 \2 |1 M! U( u+ E; c5 R# Z
for(i=0; i<upp_frame_size; )
" z3 `( ?% M1 F4 h, {/ G9 d1 d
{
6 J; y, _9 h! g$ ^1 i% F1 _* W
for(j=0; j<5; j++)
: Q; f6 Y, W" k3 F% Z
{
) D' F, [- k( S# f( ]( r
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; |3 U' }- q \$ m& Z
i++;
7 c2 c- {9 x: s7 ^6 `4 ]
//if(i >= 4096)
2 C6 g4 K" W% ?# ^: `" Y# f
// break;
7 J+ x/ S3 Y5 D5 O: w g7 b D2 x" z- u
/ W+ u u% |1 D3 T; c$ u
}
8 y e7 v4 E6 i( A' I1 [' E
UARTPuts("\n",-2);
; a' s: g9 O, B$ V
}
; ]5 _( e* d# u% R" n% J3 T
}
, }/ }& r' e* J# q
" |! h% ^6 g& t
}
; S+ Y+ V9 Q/ s) L
: z" f) r, f' A
8 \5 @ h) t9 i* {& h
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( {# x% B* O& b7 o6 y+ c
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* m4 X. Q% I; `2 H% \! L8 i
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4