嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
1 i" j7 Y9 c* | K& u2 H; T
Void UPP_TASK(Void)
0 A) M! Q* S' s, ?. \! _* u, s3 o) @
{
. t/ @, a. \7 R3 B' E
$ }2 h9 ^$ U! Z; R! `. `' A$ h
int i,j,k,target_int_count=2;
. c( u- Y6 A* p$ Q4 F" R
char ch[2];
8 ~% p. j5 Q" q$ m8 K# b0 I
9 ]3 R" V5 j1 f+ D: v
9 i6 ]4 B" Q1 Y9 z+ d6 \
' X( h( J4 e+ m) U5 Q# w+ k
upp_interrupt_count = 0;
4 N, S6 }2 J/ y5 j- ^
upp_error_count = 0;
% H1 Z# S8 `1 D' ?
) k. k P, i$ P& |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, N' I: [9 ~. o
// Initialize data buffers
4 C8 R. ~2 U7 ~9 d3 @( q4 r
for (i = 0; i < upp_frame_size; i++)
- U: X# }) n; I- r
{
2 j6 x( d1 F* N* |
upp_buffer_b
=i;
3 U1 B3 {% b2 y' M& x& ~2 W
upp_buffer_a
= 0xDEAD;
0 [( h' C9 J$ `* F ~) s* d
}
( h$ w3 }+ ^' X' _' g
% |2 x! T" p. Q1 C
//for(i=0;i<1024;i++)
$ Z: Z; X) Y: a, D0 {% Y) F1 e0 v
// temp
=0;
* j, p/ K( a. m! j% [" j& w
& c- K8 e- f: \# P' j
//UPPReset();
9 j/ z; ?- k5 I
/*启动UPP DMA传输*/
$ M7 V% K) {! a& h& _* Q, V
UARTPuts("upp_prog_dma_i\n",-2);
) R- l* u$ a: Z
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
2 s# c' l1 w5 f. w
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
! l$ t7 I7 x4 L2 h( w
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 f1 [- h3 t7 r' F. T
) K. J3 [0 M& @
UARTPuts("upp_prog_dma_i\n",-2);
+ N/ T1 n0 }# ]& @" A
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
5 ^) A! F1 q k# `
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ m% g& z, g `+ ^: k
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
6 T/ }) j& @& l0 }! u6 d
8 b; `, i; V$ }
/*等待UPP传输完毕*/
/ G- u x# T, Q0 {% H; ^
//i=0;
+ ]) ]/ @4 D' r; o/ R! p# M
//j=0;
! c7 h5 u ?& g. V2 s
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* F* e4 N6 P' h. W7 Q4 {
{
6 D7 G9 t# \1 r
/* 测试UPP传输的同时操作普通DDR数据
7 B! ^& I1 [: f1 w
temp
=i;
; l5 b0 A8 O% f+ _
i++;
' N6 N$ S" x/ f) h
if(i==1024)
1 `/ h) d' P2 J, K; _- R* I
{
# G$ n3 t0 G7 d% [6 m6 [
i=0;
I' y7 h% O# Q2 y' B
j++;
9 I# M- w a- i0 D/ [+ S0 U( k% t
}
, ^, h: ~6 b( k) i: W7 O- ?3 H1 y
*/
" ~3 p0 ` G, N$ S
. ?. _1 U* Y! y8 r+ ^
asm(" nop");
4 s; O0 W5 P5 v2 q* n2 Q5 X0 t
2 f9 S, ] X% r3 ?
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
K! f; g: R0 c2 c
}
0 K) A- A) ]4 U* g* g0 P
" p6 N& }/ ^1 m
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 r5 ~/ K8 m+ ?
//UARTprintf( "i=%d\n",i);
. D4 G& N8 ]$ C, X0 W5 Q) C
//UARTprintf( "j=%d\n",j);
( J( M" s8 D; A; f+ f
UARTPuts("Data mismatch in buffers.\n",-2);
. g* |! N& m5 j' C8 \+ S8 q
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 [* ?- N, S( X8 E3 B' K( Y
{
- u3 E5 P5 j# Y
for (i = 0; i<upp_frame_size; i++)
3 D+ s. o; {5 m* i8 Y f; b4 [! i
{
2 M" N. U% R1 i& M+ B5 ~
if (upp_buffer_a
!= upp_buffer_b
)
5 c/ \/ X4 d2 H( F9 J/ `
{
5 A( J( A- s* S" h0 F
upp_error_count++;
/ | \7 D5 @' A" |, j. I
}
* [! b0 L7 Y& h% ^
}
8 o; \6 I1 C7 M, ]1 G% c
}
: |: K B! [, d a2 c9 V4 |
) J$ i! n/ [) d! a$ H% z
/* 报告通信结果*/
5 v6 ^* G) M- y6 O5 q, I& i! b' P
if(upp_error_count != 0)
6 U1 r: M8 W) m* O" [
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* z- c* i, P9 r/ {, c
else
. P3 d* [2 D% u
UARTPuts("uPP transfers complete!\n",-2);
* L. c! d2 h* A+ ]6 a; V4 u
) I$ k0 E6 l+ q& n. I" S- T* b
UARTPuts("Do you want to print all the data?(y/n) ",-2);
7 n1 t' i4 } P3 E, D
UARTGets(ch,2);
9 b7 m+ c" p6 U h$ l/ { w/ H
UARTPuts("\n", -2);
. N4 T% P- t; ^
) z0 U/ I3 v+ x9 \. Z
if(ch[0] == 'y')
( Q3 G9 N. \& _
{
- u! x8 ~3 ~3 b+ u3 X8 J. k
/*打印全部读到的数据*/
+ \* `1 w# R( m" I" E" \
for(i=0; i<upp_frame_size; )
1 O7 ^' r- B0 W
{
+ g8 V6 [& I, K! R
for(j=0; j<5; j++)
1 U( g: g- u% h
{
) V5 G3 W& H, a$ ?" k' m% z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' D( X4 T$ @# U' A0 U% c
i++;
1 R+ ]2 n. r1 o+ _% n
//if(i >= 4096)
7 O1 y P+ r+ j: p
// break;
% M- r' S8 Z, r% |( Z+ }
2 J; q: K& L0 U* v3 G8 D
}
8 A/ ]0 R- C/ I1 d$ N5 U
UARTPuts("\n",-2);
" r a" Z# h' T
}
; \& C! X- [' }/ C' b
}
/ o: P/ P2 e! e- I
" B* d+ N) m- I+ L9 U2 M
}
& J; S0 \' K9 u( N0 z! t" ? d
6 A9 _8 { N' G
' V6 b% j1 s7 q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 O1 e% {* b+ H" P3 x* i
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 W* H( M9 G0 Q8 X
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4