嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
6 X2 B. \3 \1 j% v
Void UPP_TASK(Void)
: t2 M9 a' i) z6 o9 I; U
{
+ F, S; w7 A2 p1 R9 J6 x
( v& w1 r2 j x) ~6 |
int i,j,k,target_int_count=2;
, ]3 o% G$ P% X
char ch[2];
7 X/ R. ]3 \6 _
% E& V& `' Z. g5 G4 ~8 I, A& h
0 M ]* l, d7 y# c5 c6 v
' R1 C1 T6 z+ K# m& U6 C0 A; w4 l
upp_interrupt_count = 0;
+ E6 k9 v. p( \
upp_error_count = 0;
! [" l2 ~; h8 a
5 r& I4 m- _1 Z. S) [
UARTPuts("\tResetting uPP buffers...\r\n",-2);
2 p/ Z$ C9 U$ k) W+ w' r
// Initialize data buffers
8 y5 L# [0 e |( {! K1 a
for (i = 0; i < upp_frame_size; i++)
! z7 F0 c1 M- u
{
3 v L# A; |: u$ e
upp_buffer_b
=i;
, R- d5 f) y! a1 [) u4 e# u6 r
upp_buffer_a
= 0xDEAD;
2 }' O" e+ @% @0 |. N& ]7 F f! M1 T
}
- B! v* A" D, J A
9 v7 V/ r; ]" @& ^# |3 u! {0 L
//for(i=0;i<1024;i++)
# d4 S" {: D' I4 @) @8 p! o
// temp
=0;
$ [+ p5 d' c) W f, u0 B2 j
$ z, |, N2 n" m% @; P3 M
//UPPReset();
. R; M$ x9 v* ~1 C' T6 V1 _3 o z
/*启动UPP DMA传输*/
9 r& [- Z7 F5 T- ^+ C- U+ Z
UARTPuts("upp_prog_dma_i\n",-2);
6 o0 D8 Q- {. l/ o% v C
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 O0 ]/ q- l8 |$ \' X/ o* x
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) q! } T' o1 ?4 P. b2 r
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
/ {7 ^& h/ i$ p1 N" J6 }
+ s9 M6 M; I) F' S
UARTPuts("upp_prog_dma_i\n",-2);
9 u! {* ^! m0 u; R$ l- s
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' C6 i3 `6 ]" {" b; e2 y
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
+ {5 r/ W6 q0 i5 v
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* ~9 f, H' X( M" n, ]* I5 |
4 T% Y, n' R, ?
/*等待UPP传输完毕*/
& B! V* ~- @8 D/ E, U( | F8 z
//i=0;
: t7 d& q# T2 h" e. `6 q- s
//j=0;
( T/ H" [; A& p" X0 N
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. ?7 I% ]/ R- a( Y( v
{
) Q9 J3 U- s8 j9 Y) i
/* 测试UPP传输的同时操作普通DDR数据
! s1 E& {, q* I2 A! I
temp
=i;
" T* b7 F0 c6 Z+ Y3 u. a
i++;
1 q$ U4 J" h$ s9 G
if(i==1024)
: G! [6 a) Z. G% u- I9 }
{
7 i2 q* Q6 q+ P6 \* g3 c- u# A
i=0;
+ P% u W+ G" _- }8 C8 l
j++;
2 _/ c! B C% N- n# L8 {! ^' P( i
}
5 Z E9 v' F P. Y
*/
5 {' h: T3 ]4 s+ ^
/ M" p2 f. ^4 ^" w
asm(" nop");
6 R* ^5 e! o+ t, Q
4 n+ n* v& X9 w$ w- F/ v
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ U! p$ N; u* c) B" Y" c* k" d9 S
}
9 Q' C* t4 \' Z4 G/ K' K' M0 y
0 I) V0 ]" X0 b. Y" o& j# O
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 O; t4 k' D9 L
//UARTprintf( "i=%d\n",i);
1 e W$ ^, q, O4 F0 n
//UARTprintf( "j=%d\n",j);
' k" K* D6 y. \# d5 \* y/ O% g; P
UARTPuts("Data mismatch in buffers.\n",-2);
" ]1 s7 w+ r3 G2 f2 J9 i9 i+ X1 N
if (upp_interrupt_count == 2 && upp_error_count == 0)
* y0 H2 k- a3 i+ \
{
1 I+ Q! F+ x/ @5 c
for (i = 0; i<upp_frame_size; i++)
! Y- A7 u: {3 F; [0 Q0 _7 y
{
6 o7 u. p5 x# X1 T4 H
if (upp_buffer_a
!= upp_buffer_b
)
, } R' s0 U1 j- G9 J; ^' h, m
{
- U" C( t5 t1 N; ]: z7 m ?
upp_error_count++;
# @, j3 X3 J. ]
}
1 L* e( y# V/ U. R
}
2 P. S8 ~7 b5 G
}
- s3 A! \/ v; `0 M9 B/ N
- i0 `4 N1 i6 a
/* 报告通信结果*/
' A: C3 O* q, X" E2 C2 h0 y. f
if(upp_error_count != 0)
/ o1 Y5 i3 I- J9 Y% T
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 w3 U5 j9 {/ Z* U6 a( U$ V
else
- ]; Q Z2 {% g+ p
UARTPuts("uPP transfers complete!\n",-2);
7 V- l+ f* \2 B+ B+ ` W
* X: p% D" w1 p2 Y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; ~, v: [) f9 u9 q! \, H. }
UARTGets(ch,2);
; G5 d9 n" k. T! { K6 v% \
UARTPuts("\n", -2);
& d1 @1 X- J1 c! F' N
* w7 ]3 s& ] k t. M8 S$ f
if(ch[0] == 'y')
* U- `7 j. n$ y; `5 A/ M# j) j
{
" o; f$ n! E. ]/ u6 _" ?
/*打印全部读到的数据*/
. J, ?7 }* ?/ Y
for(i=0; i<upp_frame_size; )
: @0 Z% D0 A; l; y: T' E
{
" W5 C2 ^) t6 _) A ]2 ], i
for(j=0; j<5; j++)
; Z; S n% U. \) I# Y* _
{
, P. w w4 i9 s9 O1 B4 J# i
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: N- d" p" G; D6 F6 q; ]7 d& p) T
i++;
# J$ E5 ~( Y0 ]+ |
//if(i >= 4096)
3 [; z, x C" w# f( a2 o
// break;
- N; h- C' J6 K6 v1 K, C0 [
3 H$ U( t2 D$ h9 o! {6 d" c
}
+ L' d4 ~$ j* U6 r! k
UARTPuts("\n",-2);
* V& Z! q: \ { N% t3 m
}
; [- c! `1 C, |: Q% c! Y. X
}
5 \5 x/ [6 S8 @
6 O% a" ]9 ]6 G4 G# B
}
a+ t& u+ }9 K; T
" \5 K N/ o7 E7 F5 [
* ?0 d2 K8 f$ p* j
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* P6 N5 L, U3 P9 q g4 [, ]
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# M% L } V! d: ?& w( ~
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4