嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% }2 p# c$ j( p) W9 f
Void UPP_TASK(Void)
" b' ]- g8 M, \8 B
{
: v, g1 D2 x6 Y3 q( V% d" T1 x/ H2 S+ U
& H- G, ^( [1 P1 q, w( L6 h# s: D! ?
int i,j,k,target_int_count=2;
: [# w9 w2 q3 h5 L; I
char ch[2];
9 r- o) B V2 U9 ~$ J- h1 r
+ F. x" C; T" e0 R2 T v
" g: v' J8 N1 q2 \- E
) b2 G) h. v! y' m6 g5 L$ B4 _
upp_interrupt_count = 0;
2 m& U4 a H/ T
upp_error_count = 0;
7 }9 S! a& p: v( C1 k
% w8 O& o, G4 c1 B& N& v
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 q3 I* w, I4 {! u. q3 [
// Initialize data buffers
, F" `6 R# T2 o; ^) x/ p* O
for (i = 0; i < upp_frame_size; i++)
}; {6 [: G$ \2 t* O; P$ g' Q
{
$ I* o# d$ x% ]
upp_buffer_b
=i;
+ |, l2 {8 m0 u
upp_buffer_a
= 0xDEAD;
( ^7 y3 U! b; f; ~
}
- S5 ?4 h9 X: x$ `2 K3 H
/ o9 z" l ~% p r* p
//for(i=0;i<1024;i++)
S' a( l3 ]1 o, i$ n0 _, h6 O
// temp
=0;
1 P: ^' u j. j
9 z! b2 U1 r5 `+ _
//UPPReset();
$ n* Z. d; _) w3 q9 F5 F+ q
/*启动UPP DMA传输*/
* g7 O+ v U4 _0 s: a) B
UARTPuts("upp_prog_dma_i\n",-2);
& l9 D1 H$ C1 O( e' |+ v& U
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- T" g( Y9 U" j, @
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
1 @2 J# ^5 l# z5 x
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
6 U; X5 b* A( R
7 }" ^$ p" y' D P
UARTPuts("upp_prog_dma_i\n",-2);
, ^+ q+ z( c+ }: w
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- `! l1 H4 D5 z- A! a( _) Z5 ?2 G
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
* |, s- A# h2 ?
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 Z% @& e! o6 v8 p
7 P7 g8 @$ b. |$ f
/*等待UPP传输完毕*/
. T$ ?' f. F2 V( H% v4 \2 v% b
//i=0;
$ D! A, I# t( }# N% Y6 p* j3 q
//j=0;
, Z: p2 d9 ^/ t) }
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
# _# n" W& _9 k+ h2 z, J
{
* E: Z) c: ]* D, }* x
/* 测试UPP传输的同时操作普通DDR数据
* q* D$ k' b: _/ J9 ?# \: J
temp
=i;
" E! B. }; s: s: Y
i++;
+ v* v! P5 ?6 ]) H3 j! E
if(i==1024)
. N( {5 V' R0 K
{
' K" K4 c, m( p' @& L! J* \
i=0;
. d/ T* g; G" R9 ]. z
j++;
' ^. e% P! ~- U/ B( Y# X4 c
}
! q5 x$ f% P6 f0 w8 n! [+ L! V
*/
" n$ @' N7 P+ S3 y1 \& I( \: o' p
2 K* S% F; I& g# |0 n* l
asm(" nop");
6 c) w( K" a A9 I5 |# ]
7 E& v$ U: ?+ `, m. f/ ?$ [
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 l" c; i# P* R5 _
}
- a4 U C2 u* W% l+ C
9 v$ \, D5 s" e7 j
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( w6 e& a1 d& A" ]
//UARTprintf( "i=%d\n",i);
: n: W, h. \, W, l
//UARTprintf( "j=%d\n",j);
* N2 _$ ~8 ], N+ B6 |( O
UARTPuts("Data mismatch in buffers.\n",-2);
% J2 q: K2 H4 `! j
if (upp_interrupt_count == 2 && upp_error_count == 0)
0 b/ D( R3 _& V8 X9 y( g
{
$ P: }0 w$ `; H1 E4 z L1 d
for (i = 0; i<upp_frame_size; i++)
- [; V& {; w) Y; N4 E/ m/ \6 T; @4 N
{
2 D5 W" R+ I3 D0 w
if (upp_buffer_a
!= upp_buffer_b
)
/ @8 r3 Q2 _2 O- P0 M" i- Z* t: l7 b
{
, K, j |6 b, f& ^5 P
upp_error_count++;
+ G8 K {' g6 l* B; a2 Z. s
}
/ }& h1 K2 i) t; V5 H; O+ c
}
3 ~, ^, ^( G7 u; Q
}
. F7 m$ g6 v' O1 t1 V3 |( d
( k9 y- V/ i0 i5 n# j+ H4 _
/* 报告通信结果*/
9 v+ ^: H# V7 a
if(upp_error_count != 0)
J. r# i/ k% K) m* h- H9 H% Y
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 q! t; n0 K: `1 v" x
else
) D3 v5 [! x/ b, Q
UARTPuts("uPP transfers complete!\n",-2);
! w7 [; g- Q6 |3 f% W T3 A
+ F6 O4 k2 U% z4 I: c
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- D( A# k/ s H% C' ^
UARTGets(ch,2);
" y7 v* x6 x% O
UARTPuts("\n", -2);
4 n5 Y- Q5 f& W
7 y$ g! v' |! i- f. R# G
if(ch[0] == 'y')
, L% D" |: V* {0 W; V
{
. o# f$ `. p; b2 H7 H5 W
/*打印全部读到的数据*/
5 p" `/ z! l9 {) \8 s$ e F
for(i=0; i<upp_frame_size; )
( B$ D* m8 J6 D
{
' G- _6 w2 \. m
for(j=0; j<5; j++)
9 `+ r; {2 A- { N! n: K
{
8 \% \7 j3 a) E7 U6 [
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
. m! }+ |; r# _$ g. A0 \2 |6 }
i++;
* _: D5 r7 K0 W" z3 g# |
//if(i >= 4096)
; v: {5 {6 g, S. k. H( c2 k
// break;
% O' @! k6 @7 {
# x V8 M, r7 [. I" I! |, V a
}
: Y5 {3 z1 ?/ E7 j
UARTPuts("\n",-2);
% V" j' \( p) t' d5 _' l7 {. ?
}
' N4 S0 \* `- |' I) H: e8 n+ K: \, h
}
8 z8 s# D+ e4 }" f7 k" a l9 N
: k4 D* ]: ?3 o
}
- \) g3 K1 u: q) d' y
: F3 H* I% m& ^2 y2 y
2 f _# _6 ^9 g' Y6 @
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
3 G: C( ?/ ^' m2 Q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 \5 ]8 H. O# @( v! u
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4