嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% `0 Z0 G7 M' Z/ w
Void UPP_TASK(Void)
. x2 L3 I k A; X! f! q1 K% ?
{
V. U7 t. ^& g- c1 A! r/ t+ m
# k) s' i8 @- A1 p0 p. u3 R* E) D
int i,j,k,target_int_count=2;
3 Z+ S$ |* R8 F
char ch[2];
" q: r9 K% f" ?! G
3 a1 j* R& y2 M& Q' D- N
3 g5 K# @3 N9 @9 Q
& D5 S& C% I3 x
upp_interrupt_count = 0;
+ F- p1 r O; l8 ~" |! t9 m
upp_error_count = 0;
4 z, r( e1 @1 C( j
7 p4 \. j. s0 ^& e* ?9 K
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; _6 i# u) Y. q; d9 r
// Initialize data buffers
6 ?; ~) J: R s( U, x( ]7 W
for (i = 0; i < upp_frame_size; i++)
* c# u9 R9 u# d& n
{
& g7 J( O1 z: V$ y* P* S7 t
upp_buffer_b
=i;
7 S$ I3 w* O. b4 k" i5 z7 N
upp_buffer_a
= 0xDEAD;
+ O2 W% Q1 h2 L% ^7 F
}
Q: s4 u" u% a O" E) h
( F- l. B$ ]$ x) e6 W: D
//for(i=0;i<1024;i++)
- | f0 ~& C0 m2 B7 S8 p
// temp
=0;
4 u( p+ s T+ V. ~% u' j
) Y5 U2 K8 V L8 K. x: }
//UPPReset();
# D2 c% c q6 p3 z3 W- K
/*启动UPP DMA传输*/
2 s- n8 \6 g0 Z F. ?: f1 j
UARTPuts("upp_prog_dma_i\n",-2);
3 E0 {7 W6 R/ C4 I
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 t- F) j$ E& i& l) q
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 y* Y+ T4 C) P8 e; f9 V G
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 H8 f9 ~- S; m. ^ w5 i4 ]9 n2 Z/ b
, E& t1 _ \) `- y) k& X1 l) \
UARTPuts("upp_prog_dma_i\n",-2);
# k7 [! l* p0 ~7 p+ U6 _
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- N: D. {4 O1 I& E3 b* J# }) q
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 j! V1 f4 b1 y2 i6 r! A! x( r
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
! f0 g( h3 E6 J0 b7 |; H
2 @! R5 }) @( |6 V! Y
/*等待UPP传输完毕*/
, f0 j& W; a7 \) `9 t" k
//i=0;
G$ S# Y% y; ]" I) r* i
//j=0;
" U+ K! e! z' j, Q
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. f; N: U/ O9 B9 b+ e+ J
{
: ~0 w' f: ^5 X" u/ V; N' s
/* 测试UPP传输的同时操作普通DDR数据
: U2 ^& b. M: Q8 t" K! L, j
temp
=i;
% U a8 |8 b e6 j |* h, T
i++;
( U% S$ g8 E6 [9 ^2 c
if(i==1024)
+ \1 w* b3 R7 N. j
{
( M g" x, @) A# X7 j) X' v* n
i=0;
- z, ?3 B# u* V' O! r
j++;
, o+ @3 q% D4 C% h
}
/ ]% X: M: D2 Z# |+ J
*/
! n( l3 r3 ?% x% w4 z3 ?5 y
% O s5 d5 Z% y
asm(" nop");
; A g) Y$ ^/ C4 {6 S
6 R) T1 d9 ^( o
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
+ S* `( P+ B7 C! i
}
& e2 B/ d# h- S( q4 P" P+ n8 U- Q3 _
% r8 D, j& K: R% R a
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 O; c" T) x- T
//UARTprintf( "i=%d\n",i);
; _) n7 _' {( u
//UARTprintf( "j=%d\n",j);
/ [$ K" D9 j2 N7 X1 l& x
UARTPuts("Data mismatch in buffers.\n",-2);
9 V7 }$ D, _2 w
if (upp_interrupt_count == 2 && upp_error_count == 0)
2 C) p5 `1 s Z/ o4 }
{
% Z% s: _) w7 q6 E" V# ^
for (i = 0; i<upp_frame_size; i++)
; v4 u5 j2 f& v$ o1 o* s# K
{
( n4 I5 ^' m+ g- i
if (upp_buffer_a
!= upp_buffer_b
)
' q5 m1 K( f% Y# [9 H( U5 L( X
{
# O. ~1 R6 r6 a, l) J! Q$ X
upp_error_count++;
, I6 F: _$ w, \
}
! i0 @# Z: e9 T
}
3 n# A% T5 v/ x8 ?0 d6 ^5 y) g
}
6 J5 p2 G8 h2 O" B2 o
) O5 a8 G% a$ t! D
/* 报告通信结果*/
' T6 z" e# o+ O& x
if(upp_error_count != 0)
; G. D2 H4 K9 f
UARTprintf( "upp_error_count=%d\n",upp_error_count);
; g) C9 ?$ [: ^- F1 O
else
6 n: J' {2 H; u: U, Q; Z
UARTPuts("uPP transfers complete!\n",-2);
3 b# \4 Y( J; P
8 a* [$ L+ e6 B, N
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 \" B2 D$ f5 ^& {4 J9 z& N
UARTGets(ch,2);
0 @$ {0 f3 p9 f
UARTPuts("\n", -2);
1 b; i" x6 X- E% M- c
7 R( z6 W! U7 [2 G) x
if(ch[0] == 'y')
# s# K7 B$ K' z. Y
{
5 @- J, S6 B! ^* s+ m
/*打印全部读到的数据*/
: x6 X8 {2 e# |! n
for(i=0; i<upp_frame_size; )
8 K) v6 M! U" T1 y" C
{
+ h- K; G) n' h& T$ n9 ~
for(j=0; j<5; j++)
1 G9 _ ]8 ^: E" O; t
{
0 v4 o7 q2 ]$ M% u% I' p3 j
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
) H5 B9 d; H9 \/ p: \8 @3 I. p
i++;
6 i6 ?- G- ?4 `- t+ X
//if(i >= 4096)
$ M( g/ G* {! ]* C% H
// break;
6 Y- _0 d( o1 {& S9 @, r2 |
$ J6 G/ c P, b' f2 g* L0 J
}
" f1 J5 X4 r' i! b5 I9 G4 _# v
UARTPuts("\n",-2);
) {. y7 b; ~9 V8 [. e
}
C0 _1 f- T# ]$ `% R
}
5 r- ^$ N' w% }+ ?# s3 M5 J7 x/ j
8 w# |9 j1 o( B1 @" H S
}
, S, d5 u6 U8 p! Q5 f
$ U) o) Z; o; n
7 u5 U9 n9 m) }
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) U9 _; i Z: h. V8 {, F: [
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 t6 D2 K' U) u2 ^, w3 n
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4