嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& T! |) |6 Z9 l5 B
Void UPP_TASK(Void)
: t& r2 u, l; ^8 W$ c4 r7 E
{
3 U! U% P' ?) d1 k7 w9 B' Z7 Y" V
6 W0 [% x% }! `5 @
int i,j,k,target_int_count=2;
) E' e: z' Z+ q } L
char ch[2];
/ V$ Z8 n* m# L2 x' L, o
/ j j1 ]9 y( J
0 l7 z( @, q$ L
" K8 y. e9 j7 w: m9 r& Z$ D
upp_interrupt_count = 0;
7 x' b1 w' `( [% ~5 c
upp_error_count = 0;
% j7 F# u! j8 E( w
2 w1 ]3 V, z7 G7 A$ t8 J- }
UARTPuts("\tResetting uPP buffers...\r\n",-2);
3 l) s% k2 H; g# R0 c
// Initialize data buffers
& K- R* P; Q* X! G$ Q [& i
for (i = 0; i < upp_frame_size; i++)
- F! N, T; H ^: B/ ~" r" F
{
9 T- Z/ @0 Q/ W5 S9 o x& J
upp_buffer_b
=i;
' s5 G+ J5 e" D3 ~: }0 {0 M' B
upp_buffer_a
= 0xDEAD;
. C3 t; m2 T/ c% N0 P
}
8 U7 c) b: ?9 s8 V2 u/ ?6 {
. p+ I* G* ~; x& n0 h* Q z
//for(i=0;i<1024;i++)
' b p: j, I" j0 [) D5 c. E
// temp
=0;
5 u& n8 d5 |9 u. Q8 X3 R) r6 D
4 z( P9 s. y6 c3 s4 X+ l. f
//UPPReset();
3 G% k2 k! S+ ?2 r5 d1 s1 J* o% Y* R2 V
/*启动UPP DMA传输*/
1 y+ u& L3 K* E; \; L- Y
UARTPuts("upp_prog_dma_i\n",-2);
; M) @/ y+ y9 O7 h
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% F' M2 @: i; R# M/ O% S4 Z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
K9 o2 {7 u2 Y. M3 k6 d
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. V5 d. F9 F5 o+ k" C
) ?6 K% o6 _4 c, d! m1 F& T
UARTPuts("upp_prog_dma_i\n",-2);
5 C. d& Y) j; R( Y
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 v: S: o* \ j6 L# b1 H# u( ^; x
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, \7 A' C' C9 O1 B* T& g' }
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: A3 K7 Z, ~6 }* a" I0 o" q" y
/ Z4 W; Y3 J' l2 X; h, h6 u4 I
/*等待UPP传输完毕*/
; H# u7 W' D! B/ m, J# C4 }
//i=0;
8 {0 n0 x; p2 s/ K( B5 G5 w/ o8 D
//j=0;
3 x6 @# s" R9 m& a
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 n' m j t0 t2 Q
{
* R: C0 u9 ` V+ ^ c7 n2 N3 ^
/* 测试UPP传输的同时操作普通DDR数据
3 ]6 `% x* J6 W& _
temp
=i;
% W) R- T* V( @# d2 m; o' A6 w
i++;
" p6 b c1 Q( }4 \6 Y; T' F, H# n
if(i==1024)
& X* k1 z' U k; E* L _5 _" P
{
4 j; z4 Y3 P- ^, f2 ?! S7 r
i=0;
. A9 R3 J; K4 B; m
j++;
6 J+ m6 S/ Y0 n9 s
}
. \, F9 p+ h" M0 Z& m1 {
*/
1 F$ F! ^8 c' P) a; R/ X
& D- j" B( O2 n ^0 P
asm(" nop");
6 Y7 |( Q) b* c# _
w" r7 N- u4 F7 [. |( D4 M
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
) k$ J# H* w% n) D' `6 U
}
- g. u# g1 h9 O% l( q. j& j' X
1 [, v# ?/ z8 Q3 Q( ]% L
/*检查UPP传输的数据是否正确 (loopback modes only)*/
* J2 H* b t1 M/ i4 n. l# r
//UARTprintf( "i=%d\n",i);
% H; Q$ ~) b! e' N, e* p9 K8 ~
//UARTprintf( "j=%d\n",j);
. O7 W5 R# ?! g* t& X9 y
UARTPuts("Data mismatch in buffers.\n",-2);
8 K3 r; z) ^9 u
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 k1 Q: k: v" {* o2 y
{
6 C6 ^$ u# O7 v+ B! i, \. X
for (i = 0; i<upp_frame_size; i++)
. n& o8 [1 ?" i- L& F
{
% C0 N( l& P( ], w: n- \8 O% p, I
if (upp_buffer_a
!= upp_buffer_b
)
' O: [5 W9 Y/ ?& }8 z# e
{
) x5 F+ R" j0 [! z1 {- y2 r9 l; s# G
upp_error_count++;
" y3 h1 D- J& A7 M: c1 Y; k* W
}
$ D* C+ e$ n( Q/ s6 b( U% W- K& D
}
7 d5 }% M1 C2 l/ U
}
5 Q7 D2 I ?3 s( G5 f2 U5 ?8 x: C9 B5 Z
$ S; b4 g0 U( V+ G. W! j8 V z2 D
/* 报告通信结果*/
2 S) U+ G! a' [/ B" o7 D, x/ D0 u
if(upp_error_count != 0)
0 Q0 E( x9 z0 J5 ~
UARTprintf( "upp_error_count=%d\n",upp_error_count);
: X: J3 h; D3 [
else
' @" a+ o! k' b) A- M
UARTPuts("uPP transfers complete!\n",-2);
5 v% b/ U p! X, Z5 W( y+ ^
3 w3 E8 R) X; s- G4 a
UARTPuts("Do you want to print all the data?(y/n) ",-2);
" @. \/ f& r- |
UARTGets(ch,2);
# ^# Y; ^9 C- v: P# H
UARTPuts("\n", -2);
; K9 a' q. F" }1 i
. m8 i) `! b) D! Y3 R: y
if(ch[0] == 'y')
: k$ o2 D/ z$ | M b6 ^5 ^& R' ]9 a
{
, e& c: Q, b5 J$ w. o
/*打印全部读到的数据*/
3 h$ _+ C7 o6 C# I8 @) g
for(i=0; i<upp_frame_size; )
% r5 [/ l- w; K1 I9 h/ x
{
# H c+ U: W% i0 P( V
for(j=0; j<5; j++)
! a) {# q3 {# K! E' h( ^
{
5 s7 I3 ? M! Y) m
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
' x/ z# P5 W; p
i++;
+ M* {6 M8 K0 v: a0 U% e
//if(i >= 4096)
& E5 W" y& @5 X5 q0 u
// break;
. X$ B$ ~& g. ^3 A- z9 ]9 E
0 H0 \1 d3 B: G
}
( ]' l4 |. o3 T( D, ?+ O
UARTPuts("\n",-2);
5 }2 e( q5 J$ x$ G9 h
}
4 c: s; S& k3 e; F( ]
}
, q8 T0 ], q9 j; f3 W* J4 @
2 O3 Z* S* q3 L8 u5 M6 Z
}
9 x$ ?. L1 M9 n
1 B% e- n7 P8 P0 Q
, z( ~$ K+ D4 F& | u
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
1 S# ~9 ~ b% g; ^. ^8 v
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 Y0 W3 N7 e1 ^& j9 Y2 X
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4