嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 U. E7 b/ d# C$ o, ^
Void UPP_TASK(Void)
4 y$ r! W1 \7 t7 U) }
{
& z" V5 o7 P. ~# k. y2 H( G
, @) A- V+ u& x& y
int i,j,k,target_int_count=2;
j- R( E. n% z3 v& o" u
char ch[2];
; N3 m& G+ g3 Q' |1 O+ K
# R' z" L( i9 U/ h; w3 u$ m
( m. q) d- N7 v" Z0 `
% L$ b7 c! j0 `3 }
upp_interrupt_count = 0;
' o' `, _' h5 X7 Y% e
upp_error_count = 0;
8 t! d: g! B: R1 F1 \4 S( h
* r/ V$ A, V" K6 N. i) q/ }
UARTPuts("\tResetting uPP buffers...\r\n",-2);
' j* n! m+ e3 a/ v- j" e, z6 E
// Initialize data buffers
' A5 Q$ \, d4 M4 N# k
for (i = 0; i < upp_frame_size; i++)
1 L& _; X8 U/ `" J! n4 l( o
{
! Q \* X! g0 Y
upp_buffer_b
=i;
7 X) h/ l8 V; Z' p
upp_buffer_a
= 0xDEAD;
3 q. C ]8 O! K8 z
}
3 i! V, `: [) ~, p
: d) L k- t* k8 p' z6 G( \* G7 r
//for(i=0;i<1024;i++)
_3 E; [: I) k h1 Z( \ b. g4 s9 n, o
// temp
=0;
) ^5 _6 {+ y& u' i, a
9 y1 K7 |) L! X- L+ K7 B7 \
//UPPReset();
4 ^& f0 H( B" X
/*启动UPP DMA传输*/
9 x5 G' o: K& h
UARTPuts("upp_prog_dma_i\n",-2);
) Q4 o, `; c$ L
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- Y5 c' B3 v. s* v4 p6 O. `
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 q# f5 _6 H& u( Y, }, a, B4 W+ M0 d
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. }8 W# Q3 u$ r2 a
# g1 G A/ K b+ u: C4 o
UARTPuts("upp_prog_dma_i\n",-2);
- Z8 Q, A; r: u; I
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; @- f' Z4 e. N+ e7 t5 P, p8 P
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 S$ S! z% L- s) A) r
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
8 F u- C6 f5 [
* `% {, R& M$ t" J4 Y u
/*等待UPP传输完毕*/
9 Q& I! U! {4 s: \/ x! f( A2 @' n
//i=0;
0 a4 f- d% X" V/ F9 X& I
//j=0;
r# A1 I9 a4 ]4 ]$ M2 w
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
( H, f9 z; a7 J0 B- a
{
/ N7 n8 N5 D8 ^: k l- v1 u
/* 测试UPP传输的同时操作普通DDR数据
7 F' d# s, I. E1 `
temp
=i;
+ r: w5 A& N2 N( O/ x7 R t
i++;
K- f3 i; S- y* `
if(i==1024)
# P: L. V8 a5 |1 s w$ f
{
# Q" D- T# {/ V/ x8 N) V0 _) Q
i=0;
) J, X5 v1 u( h: h$ \
j++;
# D# K s. w' X& }
}
0 v! {1 A2 z; G* c9 b' P* \
*/
- O- Q t+ W" D
' u8 C* F1 Q# C' d( C- M }, M
asm(" nop");
3 u d" x0 n3 d+ s$ w
) Q' ]+ x4 E! g! X: e
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
8 [$ g2 I/ y5 e3 q' Q" K
}
- m# [; `: U+ A3 I% [. M
+ P: i ^; X- T* {8 ?
/*检查UPP传输的数据是否正确 (loopback modes only)*/
& g, m( q+ R2 z& o& O1 P4 j! G2 X
//UARTprintf( "i=%d\n",i);
) N/ K* x1 W8 ]8 ^
//UARTprintf( "j=%d\n",j);
@) f' L, r2 y
UARTPuts("Data mismatch in buffers.\n",-2);
+ e" \; v) L% I
if (upp_interrupt_count == 2 && upp_error_count == 0)
4 p: y7 i( V' o2 b' P
{
/ j. Z4 t3 x& |
for (i = 0; i<upp_frame_size; i++)
2 ^7 ]2 s- A' s2 T+ J
{
( U' _2 n9 F0 l- \6 Y7 t
if (upp_buffer_a
!= upp_buffer_b
)
4 b- D2 O8 x1 \, W# K
{
0 B* X/ _/ g0 v" A7 l7 k: N
upp_error_count++;
9 A9 i' T. j2 U7 s
}
" l, @7 K- G: }
}
v0 @& k0 b, M% k2 ?0 w; g
}
3 F! `' S: L. b6 M
; E* R- E+ F. \" V! C
/* 报告通信结果*/
: g+ ~* y, J6 r$ t
if(upp_error_count != 0)
0 D& t' b* N7 L$ Z" q, Q' q
UARTprintf( "upp_error_count=%d\n",upp_error_count);
" W: o+ S6 [6 u! E* c4 Y
else
+ \: h" \- W; W' \. f4 j
UARTPuts("uPP transfers complete!\n",-2);
& w6 L" n, ?' ^! O g) A4 I/ W1 O2 S
9 O- g, i- U. U: E
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 I0 {1 m/ l! V' r
UARTGets(ch,2);
) ^' o0 U! T+ P0 I# c
UARTPuts("\n", -2);
* P7 F8 w4 X1 a3 D- N- }) M/ u
: |) s( M: i- G- X. q
if(ch[0] == 'y')
! n, r( e7 ?$ J' B. S6 N- W7 a
{
6 I9 H! a& u, Z2 t
/*打印全部读到的数据*/
" E/ |, p/ R3 m2 a" Y" ^; V
for(i=0; i<upp_frame_size; )
0 A9 y: \( I: b3 Y4 O
{
7 o" ~& L5 Q: O
for(j=0; j<5; j++)
2 d L. m3 k8 b
{
% s6 X8 h) e, ~8 ^
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: l! o. }/ O% _$ P6 y7 A4 S4 N
i++;
1 B8 t- ^0 G9 @: h
//if(i >= 4096)
' F( h5 S3 C* y3 u
// break;
' F1 Q. \; D C
- @# n" I% D+ E" \ O( Z
}
$ o6 X/ H& |" }( b
UARTPuts("\n",-2);
; e- E0 |# L& u/ }, E
}
5 q* e" P3 Y. k( u g5 u( a3 ^& x
}
& x$ T$ Z w2 o# M. P& [$ `6 ^
' V, q, T' Q* G" K. Q4 m4 Q+ O% J
}
% o% s; w* X$ w1 ~
0 U ?' S! b# @6 l0 K. D
* O! V+ x0 u1 `: w+ n" q0 q
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
g3 @" A7 {5 ^. n- q. s ]7 h
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ z* K( c% K' s9 t) p/ b
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4