嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
/ N( q |! ?/ p" Y# `/ o' Y$ F' w
Void UPP_TASK(Void)
4 {3 V4 [9 G/ Y8 m* I
{
0 @5 f2 W+ `: u. D. e+ ~
; m1 [7 H9 v6 s/ }9 o9 Z
int i,j,k,target_int_count=2;
- {& I& G5 x& e/ ^' q) h
char ch[2];
0 x/ M( l6 ]2 c4 }3 `6 T
! a# {! a+ H* @0 ~, V7 w1 O
& r2 _8 j3 ?/ p/ @. H) |4 d
8 P7 Y* [9 C _; ?
upp_interrupt_count = 0;
! d0 w( b. R& K$ ^% T' b
upp_error_count = 0;
2 B6 ]* A% I# P# ]5 Q4 k
, o6 K1 C, }" k% y2 {2 j0 _
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! F7 s+ [2 e* Z# } C G, }
// Initialize data buffers
% C# d& @. }8 R9 s& K; `, ]0 z, g B
for (i = 0; i < upp_frame_size; i++)
, x- e7 ] q* o* F- v2 h n
{
3 \* j( J. u' ^- W" p4 |
upp_buffer_b
=i;
9 y, ]8 }, e( R
upp_buffer_a
= 0xDEAD;
9 i# E3 E5 c8 H% y j9 B
}
! Z$ P+ E! x0 h' Q( B1 R
+ a& ^/ y0 P" h: O* o/ f& I+ E+ |; e
//for(i=0;i<1024;i++)
. O0 ?$ g7 T# a7 k
// temp
=0;
`. ?5 f* C& Z& ?" U/ ~ i) b9 y
, I! L! G6 O7 ?2 [
//UPPReset();
. f( T1 i& }0 c/ ?* a
/*启动UPP DMA传输*/
f# x4 R, m- Z) O3 m3 Q0 n4 N
UARTPuts("upp_prog_dma_i\n",-2);
8 b/ {8 F; S, X( W7 g: j0 X+ m
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* u# j7 b" z2 w0 E5 k
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& k% L* w; E9 c% E
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
\) D" h+ f1 u& }9 V: N- y
7 c, Z; H. r& J* N
UARTPuts("upp_prog_dma_i\n",-2);
# f6 [ f1 r) ^3 |, W4 b( r
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 ^# ?: z( l1 l9 a+ h
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& q( ] E+ ]1 |' ~
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; H; D8 K% R, \! D8 _/ M! `7 H
/ ]# V3 ?3 `6 n/ \" `2 T% ]% A
/*等待UPP传输完毕*/
7 x& i5 |! o1 O" ?7 k$ x. d3 N
//i=0;
9 t' w9 l9 S1 v2 ?+ L; U$ ~
//j=0;
2 h: y( f O }( e' ^
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 M# o! n- M, p+ s. g- P, R
{
5 b7 T4 K) E) |3 n* i
/* 测试UPP传输的同时操作普通DDR数据
6 y+ b( A& O$ V; g' Z
temp
=i;
/ E0 I6 N5 Y2 R( F/ u; f
i++;
% r: [6 ~' k8 |; i! F
if(i==1024)
( v: q% f P( [ a6 S
{
2 c& t3 c# C6 X* ]+ l
i=0;
Q [* ]" @ M+ Y1 B: R- {
j++;
0 d: J7 ?8 a7 Z' ^$ e5 _! B
}
" r+ k1 S+ R2 Z# b
*/
9 p& L& ?* E f# A3 p) i% w
8 T2 s5 C4 e) w# y; N& O
asm(" nop");
" c* f1 p: K6 w4 I# B! R
/ z1 w; o* D% D. N) h0 m
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
_. X. K, g( Q! M3 M
}
2 F) f; _ A# G
- l' L$ x1 ?3 J5 a5 {+ `7 R
/*检查UPP传输的数据是否正确 (loopback modes only)*/
8 Z* S, y( u3 s# V, \. ], ]
//UARTprintf( "i=%d\n",i);
% y; {: N7 D( b% S7 l9 S; X
//UARTprintf( "j=%d\n",j);
+ ]8 L0 H% Q9 Q# A
UARTPuts("Data mismatch in buffers.\n",-2);
; Y( |+ L5 V% j! C, a. K
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 Y8 I" L% n7 e3 \) y7 p9 `
{
% ~* {' J5 t5 F* _6 z
for (i = 0; i<upp_frame_size; i++)
$ p& z5 t2 @) _; p
{
0 m) \( I, W5 K* m0 T
if (upp_buffer_a
!= upp_buffer_b
)
& [ c% L0 \6 j; J7 W& |
{
; g; O* C" h: }- C1 M
upp_error_count++;
" `* I, B0 B3 Y s: T
}
; ` H0 W( J6 m7 w! L7 Z
}
- ~; C# g* B3 n# O. R( A
}
: T9 p; M' _$ t l! R* T/ Z6 y3 ]
2 a2 s" `+ s i1 }# D5 }( a
/* 报告通信结果*/
( G6 t& \; J$ x
if(upp_error_count != 0)
! K( V+ p! f) L4 ~+ U$ \
UARTprintf( "upp_error_count=%d\n",upp_error_count);
4 H9 m# H& U2 X0 k! k
else
) V/ R& n5 ^3 @6 K& I( f# a
UARTPuts("uPP transfers complete!\n",-2);
; r+ f* _& }6 h- S S
G- ~' ~; k5 X6 p5 S/ g$ j
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 w, L M |9 l. u2 o3 }8 I! } v
UARTGets(ch,2);
- K( B. c2 L) f" {
UARTPuts("\n", -2);
8 V+ c, C3 F& v: \+ x
+ `% z; o8 o+ C" D! }4 v r% p
if(ch[0] == 'y')
' P+ \' _: o- V5 s5 {" H
{
1 v- g- R& f' V5 b
/*打印全部读到的数据*/
) e) N( V, H" ]" u
for(i=0; i<upp_frame_size; )
$ J9 B2 G) Y5 h: c+ U" ^& r+ s; i
{
/ F- D1 h( Z/ r2 w$ u; F
for(j=0; j<5; j++)
6 v! {, {! c( x, L) e
{
7 L& S5 k, W) o& i
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( g G; r8 {5 c# r: k" g( v
i++;
8 N" L$ d2 R& p
//if(i >= 4096)
$ P8 ^* _, j1 \6 Z. ]
// break;
$ S7 Z( S3 H* b# G7 I
. o- I/ A/ H9 r4 i9 W/ m
}
' @ r' _' z1 H
UARTPuts("\n",-2);
z. I; |+ R& ?( g: o- s5 d* f, ~- J
}
, H+ ?! w6 K1 V: @, h0 Z8 b# e/ f2 S
}
+ L* g) } ^$ `& u" |. c
1 l, ^; f, K& L/ j. [1 k+ T
}
/ j/ f2 J( Z5 }
8 f7 e; \# t, v/ [- Q, @3 B: f7 ^) i
, f$ \# K+ W! y5 N
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ Z6 Y1 j. ?: {' B! P$ m
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: @! V% `+ z& \7 ]5 O* W4 Z
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4