嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
3 |) P; A+ |) F2 s0 {
Void UPP_TASK(Void)
8 s% q: B& k+ i, s/ c
{
4 e! @$ f. b# P# b* y5 L3 g
8 I4 U% }; C9 W2 I% @# r; t4 m
int i,j,k,target_int_count=2;
) L& p2 m4 {7 d+ h; Q) D2 S/ r
char ch[2];
- ?, a6 X* x9 b4 g$ E) A8 F, K/ v
( `# ^' k u5 C X1 q# u
r( O6 W& R7 f) e7 S
, l+ @7 u/ U7 w$ p! w5 \
upp_interrupt_count = 0;
6 ^) ^6 a( B2 _$ p$ ~$ A8 D
upp_error_count = 0;
2 \7 R6 g& h) t: t/ ]% X1 \
2 H" X; P9 ?: V: ^; H# ]
UARTPuts("\tResetting uPP buffers...\r\n",-2);
& N. v$ E0 V8 T8 @9 J6 F2 m0 v
// Initialize data buffers
4 Y, k, }; F0 Y
for (i = 0; i < upp_frame_size; i++)
: O; N3 A4 c! Y1 c# P; c: K" X
{
7 o* J+ t1 Y8 J! U+ n4 b9 O
upp_buffer_b
=i;
* W# h9 q" j) t6 Q. D0 Y
upp_buffer_a
= 0xDEAD;
. X3 y- c- w' E1 w8 j$ J# q
}
5 O1 L2 ~; _: z( ?
[* C; ]& B8 I' N" \
//for(i=0;i<1024;i++)
8 K" Q/ e- V) N/ d. [1 K
// temp
=0;
! r, P7 E7 N' a5 C4 P
- M7 o) z( I4 ~( [0 `( g. s
//UPPReset();
$ T( G1 ]6 c2 [3 s5 g0 U
/*启动UPP DMA传输*/
$ I1 E. a; [8 o+ c; |6 G% {
UARTPuts("upp_prog_dma_i\n",-2);
# {3 c* P" ^. d( z# ?
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- k# W! z7 z' u, r1 {
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 z- s* U: q5 u- D
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. [# x4 X4 Q* w8 x0 h/ T
7 Z3 z2 ^4 Y7 Y a
UARTPuts("upp_prog_dma_i\n",-2);
* m. @- V8 i# ^. ~5 M
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
+ x# X0 C4 r# Z
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ ~% S+ g; S2 ? X9 v; U
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
( U/ H3 n$ c) @$ u7 o
z D; Y# t& I/ y
/*等待UPP传输完毕*/
( j& D$ |8 c- r2 s9 s
//i=0;
2 \" c5 S/ r5 u! N. f* J9 i
//j=0;
; ]4 A/ X& N3 b3 R* J5 F
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
; t- d' F# L+ C0 }( X
{
( i; I2 U" u, ^7 u O* p" p/ N
/* 测试UPP传输的同时操作普通DDR数据
; m* ^6 n) M) l- o$ P
temp
=i;
) S7 o6 r% V5 N$ e( w0 J3 |
i++;
- i6 a9 @! z7 D; m: p4 {( s
if(i==1024)
' X: v5 R3 e$ m* ~* f
{
2 M/ j, U" ^8 h; o
i=0;
6 Z8 _/ S0 U1 |) t; ]
j++;
0 \* L6 W+ O0 z
}
0 T0 D8 y2 T0 W, H# u3 U9 B
*/
4 _" _% e1 x& P! y4 z, q
" O4 n5 }0 V d# a' K* c/ I
asm(" nop");
' {) w. H$ c a+ q% I
7 G& `. ^" J1 @/ E4 B4 d+ j
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 R. H/ F0 ?' Q3 p# k6 y; d7 E
}
4 F! d1 \+ G+ g+ k, |
6 |$ j, @ ?3 P9 k; |! D3 v$ I/ r9 n/ M
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* o4 j2 W1 |1 I; b9 x8 e
//UARTprintf( "i=%d\n",i);
( s2 X$ V" U6 X
//UARTprintf( "j=%d\n",j);
% C- c8 B( {$ \3 U2 A6 z4 W# m# H
UARTPuts("Data mismatch in buffers.\n",-2);
2 T) z# T( l6 P2 l
if (upp_interrupt_count == 2 && upp_error_count == 0)
. `4 c# \9 p- E; b: B
{
3 G1 u C+ z, D7 g
for (i = 0; i<upp_frame_size; i++)
3 @: J+ r. J1 G4 T& h* t/ D
{
, n0 e. |. B9 J( _, b9 b: L: ]9 O" R
if (upp_buffer_a
!= upp_buffer_b
)
. A* K# Y3 F1 Y: K$ T; l2 T" b
{
1 ~) a( U4 R0 C7 J0 S
upp_error_count++;
) S8 Z% Y5 d# x4 H
}
. s" [0 x9 I i6 h: n7 ]) W
}
, c# W+ [/ U1 ~, Q/ m
}
1 P+ r" Q: g, U# x: t/ Q, K
. l& b/ B- ?( s/ _2 H ]
/* 报告通信结果*/
* ?* h y! m- u: R+ X! {$ G
if(upp_error_count != 0)
2 q9 e- x; O7 p, c$ M
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 v, B4 g& c1 L6 k; I. v; B+ o! O
else
& r- ~5 q' N5 F6 R- [0 r. W
UARTPuts("uPP transfers complete!\n",-2);
* O' g$ e+ O! u6 V: A
6 E& C6 } \# e- w1 _1 N& F
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 V5 M: z+ Z; T2 |6 p9 J& l
UARTGets(ch,2);
3 _# W, V5 a# y6 z* w
UARTPuts("\n", -2);
; u* t% H! t" Q# g
& Y1 L* P& a4 N" a$ X2 X
if(ch[0] == 'y')
$ x2 l5 P, v7 [' g! B* r
{
2 X- l6 V( B2 N) y* m4 F l
/*打印全部读到的数据*/
7 r5 H$ O4 ^* g) h7 |2 R
for(i=0; i<upp_frame_size; )
2 l5 U, d" D& h
{
* P# D! i% Q5 t$ h+ t8 g+ q2 s6 G
for(j=0; j<5; j++)
1 b: O$ ] @. s; i
{
2 Z6 p& }1 P c8 t. f
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. J' b, V( S# {4 M1 m" ?- }8 l
i++;
% G" G! p l+ d' z
//if(i >= 4096)
j' b9 {' r x' P
// break;
) D/ O, W( j* u7 k1 t3 t
+ ?1 _0 C8 t; K' K, z) L& E
}
/ V, E7 N, p4 W7 F8 m5 x2 k
UARTPuts("\n",-2);
; r. ^' e7 T n
}
6 b5 T" G! s- q1 {4 z z
}
# A2 U3 U' J9 m$ a: w
* \/ Y1 x! |" [( ]+ }0 R9 W+ T) }+ s; ?
}
( E* j' G* V- P2 c( p+ _5 Q/ i4 R% G
! \6 O; G4 r: r0 D0 J
$ u# T" k# p0 z' G; S. o
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
$ f" J# l/ n! {/ z
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
* [; @; s$ A. l2 S7 L; q
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4