嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
* u1 ?0 N# i, Z1 C
Void UPP_TASK(Void)
( x4 c k8 h/ m0 O) M
{
8 }( j1 l/ {" Q& C
+ v, B( c- d/ ^- g
int i,j,k,target_int_count=2;
2 ^+ L8 V5 b. T# ^' [2 Q$ W
char ch[2];
3 E2 `; ?' Z% J. @
9 p* ~5 L6 W. Y# s, c/ Q8 }
) O: g3 r- Q# H- r
- E- s. N! C# b; B
upp_interrupt_count = 0;
2 T" w7 G5 A: X( ]( \ Y
upp_error_count = 0;
( D$ [# S M' s B7 }5 N
3 r f- y$ N$ }+ N7 l/ ^" A& w
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- f R- i" k# I2 a% r" J
// Initialize data buffers
0 o- A7 y- P! L. M
for (i = 0; i < upp_frame_size; i++)
- c: t. j Z3 u& ^9 l7 l8 M
{
. }& Q4 k! D2 l
upp_buffer_b
=i;
+ a# I2 Q z: K( E
upp_buffer_a
= 0xDEAD;
( @" a% O+ R U; I5 }4 p- s
}
, i' T/ ]9 R- ]; X. O
# v3 N% ]0 | ]1 T4 P( Q$ M7 \6 R
//for(i=0;i<1024;i++)
; }; M4 z' b3 K( l1 r, K! m
// temp
=0;
& m3 H$ G3 k K3 x
/ I7 u" v2 g* W: L1 h8 q7 X
//UPPReset();
3 C; a3 Y9 D! N
/*启动UPP DMA传输*/
6 B7 p {. Z7 y$ z' d6 S3 L
UARTPuts("upp_prog_dma_i\n",-2);
6 F. @* Q- O/ C: F' Y( {
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 U& R* t) D! O& F
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' m# ]4 ?' B+ N( `) B; E& `
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
' n% r X: t8 P A6 B& {3 a' }4 t
5 K4 Y' C& e" d8 a2 {) z) x
UARTPuts("upp_prog_dma_i\n",-2);
; D% e5 H. j! R& U( Y2 [ Y
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
% E! [2 P1 r I/ u6 L
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
' r. e' I( h, p2 j$ Y& l
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ A6 Y4 ?$ z' M+ i& e7 K: c
$ H5 q- \# r8 m( O! V, F: \2 Z. o
/*等待UPP传输完毕*/
) ? r, w( l+ e. |" f. n
//i=0;
" U4 \7 u ]6 ?% Y7 _& y/ [! n
//j=0;
7 c" J! L. p4 f: R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
: o1 p% a6 _' q
{
G4 C# Y4 j& `( c d& r+ ~
/* 测试UPP传输的同时操作普通DDR数据
4 w3 ~; q l2 `) G4 k
temp
=i;
, o, b. P+ V- Z
i++;
) V( t4 c! P$ w
if(i==1024)
8 i( {1 H0 D, L5 p4 i2 l$ _( t
{
/ M0 h% m* n6 B2 R- w+ {: z
i=0;
" c% Y5 A% V8 Y' F
j++;
3 K" l* m) S; S% x. [& `. g5 J
}
9 F& t( }% [! l4 Q' N7 g
*/
+ l! G0 H( R9 e j
- a' H! }. `6 h
asm(" nop");
* l( ~3 P* C8 K
. y( s& |) R; C3 M+ i1 y/ @) O
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; V) ~% g1 Q" y( T% j9 _: N/ v
}
$ p$ E* |& |( P I5 y+ D
/ A0 M _1 v/ ]: Y
/*检查UPP传输的数据是否正确 (loopback modes only)*/
+ Q, |+ @5 e. B }! s u1 p
//UARTprintf( "i=%d\n",i);
( d6 ?- ^# Z: U' m
//UARTprintf( "j=%d\n",j);
7 `) F4 l4 ]8 n. o; G) y
UARTPuts("Data mismatch in buffers.\n",-2);
1 R. x9 G+ w6 R. g7 o+ v6 M
if (upp_interrupt_count == 2 && upp_error_count == 0)
2 n$ r4 `& `$ a8 M( n/ }5 x0 y
{
) n$ j4 x5 v3 S" E; N( J9 }2 s
for (i = 0; i<upp_frame_size; i++)
( d% w/ K0 z+ ~# O
{
9 p/ r' p) \7 P
if (upp_buffer_a
!= upp_buffer_b
)
# m$ k `" q/ o; C/ {
{
1 \5 ~& D. j8 y& _+ ~ t) R
upp_error_count++;
1 x( `8 [2 ]9 j. J( x
}
" F' Y; {+ S3 V; p; O6 {
}
! _# n9 L2 z& n& f( ~
}
8 @7 z& f% W: G2 v$ o
6 P. z0 }/ m4 `" P
/* 报告通信结果*/
' _7 }! n3 |; ^- u
if(upp_error_count != 0)
' N- Z* e' c( k8 O
UARTprintf( "upp_error_count=%d\n",upp_error_count);
2 @4 @& l3 H7 q7 c& z5 c7 v
else
1 B9 o+ c* Z7 T) j% V3 ^1 ~
UARTPuts("uPP transfers complete!\n",-2);
; q9 S+ |0 t) ]
3 `, _ L0 e4 ?2 b+ Y6 b, j* m+ Y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
n0 T& I* ^8 G/ _3 J5 x4 g/ g
UARTGets(ch,2);
+ [& E& q; @5 D: T/ f3 S
UARTPuts("\n", -2);
- l! k+ b6 x, N- ]: `
2 u' _$ d8 u, x5 Q
if(ch[0] == 'y')
% H! G$ F; K* k- e' |$ E0 _6 @1 a6 J/ R
{
7 |& w7 M2 ?, j! j: T( T
/*打印全部读到的数据*/
# o( T. j+ h2 I# R0 k s. p: c. D3 a
for(i=0; i<upp_frame_size; )
M6 K9 Y/ W" E/ I) X) [& b; ~" l
{
, k+ a" w8 a0 t5 P/ g
for(j=0; j<5; j++)
3 v' a) t% D5 \2 x; ?9 ^; E' `
{
& ], T0 W) V" l- s5 R* n
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
- n. h4 Z) h( _* _1 A. J
i++;
v* I f- @ \
//if(i >= 4096)
! l: R3 R3 E& G" g3 {7 X3 l& Y7 l
// break;
! e0 {+ G! z( N$ W( r
5 k/ W, n" |/ w& i" ]% x
}
- ^$ d- {" `- U1 [! v2 a7 e: f8 S
UARTPuts("\n",-2);
# R) ^/ E6 V: o! P3 p% C5 u- m
}
) H& A% g1 T4 d) ~
}
! S2 G: W9 |& O, N
: G4 \* o4 |# S( ]; m3 H: n: ~; X
}
3 `' c0 O- v9 i
9 D* T0 x% a. w, N {
5 `/ Q$ C: E8 V; k6 P5 a2 p
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
) `( V9 I/ J! A; i( z# \
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
% s) l; g; _2 |
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4