嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
( S+ L9 L4 ~7 q
Void UPP_TASK(Void)
. C7 c4 x% e7 ~4 R1 P, q
{
9 O3 }* v0 J7 r+ T
' S9 i) x. v. D3 a" E
int i,j,k,target_int_count=2;
7 H- p; H u4 R: V7 ^3 O1 l
char ch[2];
* \9 d" E3 r N
2 y" I' K3 c) A5 i! o! W: B
4 S5 J! w& W9 ^ y4 {0 B
. z+ Y9 |! N. {1 T0 j# p2 ^% t
upp_interrupt_count = 0;
- x) B" L2 x T. b
upp_error_count = 0;
# e4 f/ s* f8 K" i( F' ~6 s! W: E
, L' D: \) \; D( m5 e4 Q
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' x. P: i8 _) U- S- W& M
// Initialize data buffers
# ?% b; B( q& K
for (i = 0; i < upp_frame_size; i++)
- {. I1 Y% w5 N: W1 {, o; u
{
% z% g5 ?# s" `: N0 ~
upp_buffer_b
=i;
- q9 E& v5 y; w V& U' R7 ]" [
upp_buffer_a
= 0xDEAD;
" _9 t' h6 R/ I+ P
}
) `: w' G' z3 Y* A3 X8 y* s9 h2 v$ _# [
2 B, `* g/ S- P! O Y! {9 P
//for(i=0;i<1024;i++)
/ ?# G4 i- [) @
// temp
=0;
1 t) b7 H8 y0 f( A, [% }
/ u. M) J# ]" _2 L- n
//UPPReset();
- ~: m7 ^3 t6 i1 T9 m
/*启动UPP DMA传输*/
, e0 J' P* u4 e; Q, g# a" b" f
UARTPuts("upp_prog_dma_i\n",-2);
% y: d8 O; e7 s& u8 Z' `9 s
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
: H. ~+ G: s a4 o$ X! O
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 a: r5 T: f; B& Y5 m0 [7 H3 c; Q* [
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. N4 t) G/ }5 w+ U$ ]8 M) U
( ?6 f( v" K5 ^& a" |7 `
UARTPuts("upp_prog_dma_i\n",-2);
8 V4 Z1 H7 l' p) Z: w6 M) D
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 a8 q; }& I8 ?% s" z/ T
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 o: F. \- ]2 s1 _
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ o' w- Q8 [! }1 ]
- d h! c: o. q9 L3 r3 R. y
/*等待UPP传输完毕*/
6 S# }. e. }; {$ V a4 d* X% A; X
//i=0;
; |% Y2 n8 u8 l; o5 j
//j=0;
* f! [: Y6 L8 w. y3 ~7 m4 M
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
+ [# z R8 b7 I2 W2 u( k
{
; L& r/ L" O* a1 C) i! v
/* 测试UPP传输的同时操作普通DDR数据
+ s9 O A$ T5 e
temp
=i;
. p2 n N) b; F7 r
i++;
: X- C. s/ m4 S9 f4 y' B' F
if(i==1024)
$ u/ A, v: G d) Q8 L
{
" R2 R; z/ Z; j* y0 |1 [
i=0;
: b5 o. x$ H. i$ j
j++;
7 ^1 L( u9 G5 S: ~, w/ k1 _7 a. o
}
2 K6 {. h$ n q/ U4 G
*/
' q3 p5 ]* K/ C
6 Z3 T( O& ~* E7 U- R; v# e
asm(" nop");
, V, E1 n: \# m9 g9 M& \: k$ p
: y8 H& d/ ?5 f( z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
- L/ h1 z' B. r( T
}
$ y* l+ n6 |! _7 k8 s: B* }
) O. I2 \9 ]* W$ G
/*检查UPP传输的数据是否正确 (loopback modes only)*/
1 }7 d9 v( D9 u/ j
//UARTprintf( "i=%d\n",i);
$ v l- U* D: i" Q8 l% \
//UARTprintf( "j=%d\n",j);
' P) h7 L/ l i2 f" L4 X9 e; t9 {
UARTPuts("Data mismatch in buffers.\n",-2);
- `! b" I0 h. f3 G/ [
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 G6 f$ o; k7 |, e
{
" [' k$ L0 ^7 J
for (i = 0; i<upp_frame_size; i++)
1 l- l$ g7 m0 h- y/ E
{
7 z+ v E1 P6 G! K4 p8 p3 T" s
if (upp_buffer_a
!= upp_buffer_b
)
2 s. e* m3 x3 A2 {7 f" f( Q% s
{
, W0 E" P* N: p( w4 P; P
upp_error_count++;
7 i- v% H l% n) b. w
}
4 R/ M b7 A3 Q2 r
}
' N/ d/ J/ S' N% D
}
* p3 ~- }2 }8 B* y# ?, i M
9 W4 x9 U2 @% n$ p( W' C! Z( o5 P% `
/* 报告通信结果*/
* o" `: q$ l6 v
if(upp_error_count != 0)
+ c# e1 M$ C# X
UARTprintf( "upp_error_count=%d\n",upp_error_count);
) z) k# h$ q* E2 d# ~+ g
else
8 Q, f5 k& T2 X; ~7 h4 c
UARTPuts("uPP transfers complete!\n",-2);
4 ~7 N" U x$ \$ }& d& c( g
: s* |1 k; h" q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
( h n/ N( ~- T/ L
UARTGets(ch,2);
3 Y+ ?2 T0 e% X9 A
UARTPuts("\n", -2);
- H& U: D+ P/ U. S P
, k3 b" |! S" Q- D/ K
if(ch[0] == 'y')
: j5 H* F6 {! T$ M. I
{
! T, x w& i& x9 K- R: m2 [ c
/*打印全部读到的数据*/
) C, U% X, W$ M6 J: f
for(i=0; i<upp_frame_size; )
: c2 `! `& R& F% I* k
{
( m/ `- g) q+ f4 u3 l4 v: k
for(j=0; j<5; j++)
7 }) ~" f; t. R$ C
{
0 n, k! H/ u" J* Z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
9 L+ h9 V2 U" J8 a* I6 y0 |% z
i++;
0 M4 z! w) j" z2 a) r. I, b n
//if(i >= 4096)
1 e3 p: D7 c# H
// break;
' Z- i2 W, @$ a6 j# c. O% I3 S; K
* v0 W( a4 p, @8 a* G
}
* [# t; G: n( P, m& W
UARTPuts("\n",-2);
) J2 g4 V+ K+ c& l
}
( c4 Y* a- c n( ?# f3 r2 j2 h) d
}
1 H, |7 ]% l% K \; w, `
( S/ [* r0 s) {; n% Y
}
( A, N7 E2 A: V- P
) ~+ K: Q) B! J T
2 n( _; U& V% k7 `& R3 G
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ L. q. Y' q; Q% [( n
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 Z0 b# @8 g! |; j+ _
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4