嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 s+ ^0 }) w9 h$ q
Void UPP_TASK(Void)
% c4 X1 z2 d+ s& V- m
{
. f s( E" t+ p: e6 Z" B0 r
: A2 \( g4 {, @) H [- r/ f
int i,j,k,target_int_count=2;
8 R5 n! u4 M g! M; M
char ch[2];
, j- \% f9 e% `2 V5 q" _6 |2 g
& @/ e: l: o7 E4 w& Z
1 k& K, v V; H5 J
( y* N' F B. H1 P1 f
upp_interrupt_count = 0;
d ?+ g+ S) X' P1 E! q( o
upp_error_count = 0;
, w- N# |: X* M7 j4 Z/ V
- D: E% \, S+ s" c2 G
UARTPuts("\tResetting uPP buffers...\r\n",-2);
* A5 K$ X' t2 @( R- T% ^: E7 U! ]) g" ]
// Initialize data buffers
( Q6 M2 h- f! O: u
for (i = 0; i < upp_frame_size; i++)
$ j1 }/ M* ^2 e5 T
{
6 h) R- K0 Z: q! f! ?/ V
upp_buffer_b
=i;
& J8 K- {6 F2 v/ q& F
upp_buffer_a
= 0xDEAD;
5 P! E9 ]5 P5 Z+ P
}
: n9 i3 e/ e o% T: p( [" w
4 s: s1 c" u% ?
//for(i=0;i<1024;i++)
4 N& Y+ P' A% V* f! U5 Z
// temp
=0;
( ?+ Y2 e6 b1 v. y1 @
9 K/ t5 \- A; ^7 O9 {/ j+ t+ H
//UPPReset();
. R! {7 b h, I* f
/*启动UPP DMA传输*/
3 y; @% x, u5 t9 r6 |
UARTPuts("upp_prog_dma_i\n",-2);
6 b( L' Z8 s! x* [
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 [, G! }: Y$ J5 |! s" w6 V. q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 m5 Q, g, R! E$ M% X+ e
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 {! m- P7 h4 I7 o7 Y1 R
2 T- ~. ?# d" @9 V
UARTPuts("upp_prog_dma_i\n",-2);
" e. i+ O- G" q; y/ J N' k" b
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
m3 y: i. W) X4 n. I. o
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) V5 i4 w, j5 _( y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
4 \+ [* J q1 o2 H; }
* Z7 H# N# h' J2 ~
/*等待UPP传输完毕*/
1 _" L1 T" T3 t
//i=0;
4 |# i) D8 m8 G: k" a
//j=0;
; _ g9 D, n" ~( G$ i% Y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
& H" Z! E3 w" h+ l3 e" S$ Q1 t% \" X
{
+ h# x6 W8 H$ K( ]
/* 测试UPP传输的同时操作普通DDR数据
, ^8 ?4 a$ O" A, N; E+ ]9 O) {
temp
=i;
. M+ B3 j; _0 A6 z% J9 x3 s$ @2 D
i++;
9 F, ^1 D$ ~1 D8 Y0 m6 d- k$ X0 d" E
if(i==1024)
6 g! x! f2 ~9 m& l2 n8 p% i' y; B. l9 Y, G
{
4 T3 m$ Z/ p' g9 t6 \; g8 y
i=0;
7 v5 r/ @, D ?# p! ]3 A" A
j++;
: O8 j) s4 I7 s# g3 L2 Z& }7 X
}
$ c' e& I( U- E- M
*/
+ P; Y4 n% H4 k7 \1 `1 @
; W- ~: p/ v' R% o$ \7 @2 D
asm(" nop");
# H* _1 H& S; T2 z- v/ M: Z
" @6 N G$ O+ k" ]! b
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) Q! n# ?. Q9 _' C4 s: | F
}
1 g4 A- I& _: d' V$ V
; p/ n. Q* _1 n/ ^' F
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* G+ c0 t& r% e% J/ b; c, v: l g
//UARTprintf( "i=%d\n",i);
: z- f$ c5 ^6 D; w+ |, A, t/ f
//UARTprintf( "j=%d\n",j);
4 v. ~- K0 i5 ]8 ]! B/ x8 D
UARTPuts("Data mismatch in buffers.\n",-2);
f5 `7 i' [( Z. |
if (upp_interrupt_count == 2 && upp_error_count == 0)
# Q4 y. `3 G2 ~' v2 b
{
0 O2 V' V% d0 M5 F
for (i = 0; i<upp_frame_size; i++)
- t+ _9 t. t' c% r7 |' L5 x
{
9 V5 f/ j0 I* o3 d2 |7 Y
if (upp_buffer_a
!= upp_buffer_b
)
9 h# _ Y0 S& E% G7 b' I5 i; w& a
{
4 C& f0 A- T. w4 Z" @
upp_error_count++;
# T0 U+ s6 p7 U0 }1 w/ a2 h
}
' R- u! ~: y* | m% h
}
& t3 H ?$ U: m
}
- z. [* K+ K+ I% p O
. a# U. o% Z) ~+ Q$ f
/* 报告通信结果*/
, U# D; n* v W
if(upp_error_count != 0)
5 x3 X, T9 u7 A7 {8 X4 ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 J2 n* v, x4 ]- L9 T
else
9 q% O0 V* F& r" B i+ m
UARTPuts("uPP transfers complete!\n",-2);
4 X4 |1 Y4 n) C0 t
7 i1 T. f. X# _; @; V9 C% ?' e* ~ d% R
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' [$ m1 n$ {5 f5 m" F/ U
UARTGets(ch,2);
' z1 p7 C( U/ Q( }! u9 e, F7 T
UARTPuts("\n", -2);
! m, @' |5 }$ |* k- ?
) y& e% }8 f9 k
if(ch[0] == 'y')
7 y* ]( _2 v8 y+ ^# M- C
{
$ N: L6 f. j, l0 s. E
/*打印全部读到的数据*/
" _+ ^% Y# a+ l+ w) j1 y8 J; _
for(i=0; i<upp_frame_size; )
# n# z5 B% S+ ] ]5 I; o
{
, H7 ?% ?9 _- a
for(j=0; j<5; j++)
- V4 \, n( ]& x! \4 x& I
{
* t2 _% \' e q9 ~3 q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
, y' a T% L: R: \4 n2 x
i++;
5 [" a4 l0 l C5 P/ d
//if(i >= 4096)
" v6 f) r- A: |9 N: M
// break;
( u) ^* R- _$ C6 x4 E
0 d6 A6 q8 |" c9 ^3 Y
}
' T! z8 s+ e% w% L# o
UARTPuts("\n",-2);
# J8 ^- x' I, z1 { Q* O
}
2 f# R0 K3 ^3 H q! W! f; f
}
3 ^% e0 X) Z9 l+ | G" d6 l( J
& T3 B$ ?# F9 I% B" \
}
6 \$ w4 [; Z C# I
7 S$ d5 @: [! k. s
* K" N H% @# n
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
' g/ R2 b+ w2 H* @% y# z+ S$ B
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
2 H5 H( L. V: B& a. ^
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4