嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 W/ ?/ H% C- u! J, ]: ~
Void UPP_TASK(Void)
, O! E9 F; M" Z. A$ ?( @0 }
{
3 A9 y; f3 p( K. @8 o( t5 i
' { e$ T% d: B; }8 G
int i,j,k,target_int_count=2;
* Z8 K# e- A( F6 [1 u: R4 F
char ch[2];
/ G' v: t& f, m
4 U, k( S+ d' [! {2 u! F$ M: ~
; \9 l' P5 v8 Q. d
/ f) q+ V# L! i# H
upp_interrupt_count = 0;
* ]8 F2 ]/ a. ?6 ~5 P9 L. _
upp_error_count = 0;
, Q3 e- a+ |9 _ H
+ z" O* E5 A& t
UARTPuts("\tResetting uPP buffers...\r\n",-2);
% k; f( s7 l" r
// Initialize data buffers
+ A4 J) ], I g- `! C' c& F# x
for (i = 0; i < upp_frame_size; i++)
+ {+ \4 a% K- Q0 Y3 }" H" _
{
: T! {, G8 @! y3 W
upp_buffer_b
=i;
' c2 _7 v3 O5 h( A) I2 ^
upp_buffer_a
= 0xDEAD;
J6 M8 f+ c2 R' q4 Y0 S
}
; V& g. q2 {4 O+ ~& t' k
" V* L; y- X; v& u- j+ N
//for(i=0;i<1024;i++)
0 M7 W/ u2 `% _
// temp
=0;
) ^* H/ O+ v% R" S- r6 q8 A4 n
* B: o8 o6 S! \; x2 S
//UPPReset();
4 ?# u$ `: @* i$ I; u! [
/*启动UPP DMA传输*/
7 s) j/ z: v" i& P; T5 U1 H' Z8 \
UARTPuts("upp_prog_dma_i\n",-2);
7 H( e! `. n: X9 x
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 Y# h7 Y3 G3 V- `
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% ]8 S+ m2 [+ Y* f9 x' y
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' S+ x8 _; u. H2 e7 x8 C# f
& T/ f- q% n9 M5 V
UARTPuts("upp_prog_dma_i\n",-2);
( h/ s6 Z o. s5 T
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
$ d% |- q6 }7 y# _
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 U' l5 X% H+ G* ?' m9 a+ ^
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ m' Y% p3 P4 v
2 d- {1 R: }5 E7 Z8 a8 n) A+ R
/*等待UPP传输完毕*/
: _$ o, J/ ]8 q1 n
//i=0;
0 J7 N0 _6 C9 l8 V% F
//j=0;
0 X, w) n! V1 R: @4 D3 a; d# c% x
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
2 P) ?# _ B; q3 W6 P$ |' D& G
{
7 d# l" x4 i ]) E. u+ [. ^7 L
/* 测试UPP传输的同时操作普通DDR数据
# D* Q# w& Y4 ]1 T* P2 q8 P0 n/ l
temp
=i;
3 o* R+ J; q2 c3 B% W
i++;
' F4 r7 W. j+ ^' s6 l0 D+ M: ?
if(i==1024)
: w9 e& D4 W" I5 ~2 R
{
+ x& l. ]9 g6 w6 A" G( n, W5 }
i=0;
* e! e( F9 X# ]9 A
j++;
% E, o, z) P; b
}
2 k. ^9 A" O1 X% ?
*/
9 F2 d! [( {6 @! T- N
# J4 K: D( {! ~8 O) a1 B
asm(" nop");
+ Q/ U! \8 T; C% @7 e
3 L. @. H5 D# k
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; _2 k6 ~* B0 M4 @0 M
}
3 W& G9 H; Z' Q" ]& S
) A+ j: i/ P& E8 R& o) ~
/*检查UPP传输的数据是否正确 (loopback modes only)*/
2 d1 O& v$ }( c. }6 `) N
//UARTprintf( "i=%d\n",i);
* p" H2 ?+ h& P' O/ i! H% C
//UARTprintf( "j=%d\n",j);
2 A1 Y* w @4 y% {+ h G# {
UARTPuts("Data mismatch in buffers.\n",-2);
$ l& w5 L0 D% b7 k
if (upp_interrupt_count == 2 && upp_error_count == 0)
* S5 B o* _: j0 T
{
: k) W" ?' I% G; q" r P
for (i = 0; i<upp_frame_size; i++)
, A0 X' _* R( A, j3 |
{
/ F+ Q- I- S% Z
if (upp_buffer_a
!= upp_buffer_b
)
/ T' }3 b+ V {9 {& T+ [
{
# n4 `2 I9 Y$ C; x3 l0 K- U
upp_error_count++;
7 l: j, Q" ~& N* Q
}
# h ?9 l: z: }- g* f
}
$ K. J1 U' \- N4 h% S; K
}
/ I$ [+ d& y0 p
L& P. b* m9 V+ K, @- _3 `
/* 报告通信结果*/
* G# E3 v- s9 B+ y+ M; W$ Y
if(upp_error_count != 0)
; d0 |+ I: t4 }+ G/ P: j: S; L6 K
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: A& F0 n0 d5 Y7 I
else
* H$ ^ a& ^+ U% _
UARTPuts("uPP transfers complete!\n",-2);
& h; V4 o; Z* V& k2 Q% S5 D& _
; q& @3 f, d0 X5 Q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
& l/ [+ H6 I7 {9 u( K4 U
UARTGets(ch,2);
' @: d0 @. P+ m# r2 H' e9 a8 ~
UARTPuts("\n", -2);
6 W# ]/ \/ h ] w4 e B
. w4 d6 P N# ]- ?. L; o( w! ]
if(ch[0] == 'y')
+ O7 U" H Z* v S6 x# h0 ~- K4 p
{
0 M4 D' n. Z# H/ p
/*打印全部读到的数据*/
# _. ^) z9 K# E1 E# x4 H( M
for(i=0; i<upp_frame_size; )
8 d8 ?. s) x* i, e! M3 A1 G
{
8 | S1 ^. C" Z
for(j=0; j<5; j++)
# Q2 f+ E# ^3 Z9 X8 W+ w' } S
{
( H$ l+ |% U5 K5 w3 {
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 z* _! M3 y0 k, J! t1 ^
i++;
; d; O- s4 {. P
//if(i >= 4096)
6 e) p u0 e! U& A
// break;
( `& g3 F4 e6 h
" r5 U1 j& b; A" N/ n$ N
}
" ?- l8 s& }/ F) q; L
UARTPuts("\n",-2);
/ z4 P {! n( y; }& Y
}
( I9 h) B' B4 o8 L l( `
}
, E2 U1 T6 {/ }, z* G4 l+ x, w
& p8 K% a/ {$ S4 z5 Y6 n) G
}
$ F3 W6 e! _" `
7 S2 A0 V! V* `" f& \! B5 ~. k5 V
: {0 \! O& J. Z% h3 J. l0 k
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( ]& e( }7 S D& x# z
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. k4 Q6 H6 e# C0 K! B3 _
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4