嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
& ~# Z1 n% _8 x, D# |, ~
Void UPP_TASK(Void)
; i3 ~4 X4 @, M+ s( \/ O5 K2 B
{
4 c& d+ o0 D1 H, I+ \8 }
% v, f9 B& X! O P9 f
int i,j,k,target_int_count=2;
2 H8 C# Z4 z2 q6 V
char ch[2];
; r- ~9 R1 G* T; w' ]. F K1 C9 K
' I- ^) \; ]* O% X5 i' b9 J6 y: O+ R
5 _1 c S m D# [
$ r# u) s2 O( V. u+ j9 k
upp_interrupt_count = 0;
$ Q. v* u+ B8 [& \ d
upp_error_count = 0;
/ m/ i* m$ ? [" P" C' N* j: G
4 {; ?. K- j' P2 z. p+ n- a
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 a& t( _$ N6 z: r6 `; O6 H
// Initialize data buffers
* [+ e; S/ }# a; d
for (i = 0; i < upp_frame_size; i++)
; q8 v/ f: G* d4 ^- F* X0 ^
{
) Y' Q4 g% Z1 L: \ a! a' s
upp_buffer_b
=i;
( F' `) B6 q9 W9 p
upp_buffer_a
= 0xDEAD;
. F& {) Q9 |+ p; Q$ h$ m3 N& C
}
& h# p& e: S3 Q9 D+ j( u& M/ ?
9 m) h, f3 V1 r! _, a2 K8 t$ r
//for(i=0;i<1024;i++)
# o% c( {2 P& b8 C% u. O! b* {
// temp
=0;
2 V- r% |4 t& B% P
X+ @% E7 T# I1 [
//UPPReset();
9 E( C' }9 R3 [1 m' j5 d
/*启动UPP DMA传输*/
: ^; I( p9 R& I3 M# z7 r3 `1 i& K
UARTPuts("upp_prog_dma_i\n",-2);
7 ^7 C$ X1 y8 L3 ?
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% H* z$ K5 S4 @3 ~' j
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: n( V ~$ {4 v
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
2 ]" ?7 z/ u3 @0 z. P
" M* D+ e& s( T7 H* I
UARTPuts("upp_prog_dma_i\n",-2);
5 Y( M2 N! n+ B
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
T& k; E1 R( d
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
, _% F: H/ g# B" {0 F2 Y
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' U3 \; J) `$ \2 w: E
( U6 y5 n( B( D
/*等待UPP传输完毕*/
9 N) p' b0 i3 j: d8 _( `
//i=0;
* g7 m! s8 Z- E+ y& q; m( P
//j=0;
7 ? }- {3 a( p7 J% ~
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
$ N0 |" L$ D8 \/ i
{
4 M+ ~9 Y6 F- ~8 |$ v5 ~3 `
/* 测试UPP传输的同时操作普通DDR数据
0 z, b* h4 I* r' l2 u+ ?
temp
=i;
. _' ~! j3 E7 r, `/ N/ R; O+ H; P- @
i++;
2 B$ t- F# B$ L' g: J' G9 }1 c* K
if(i==1024)
. _! H5 Y6 K2 B' }- F- M
{
1 A+ k3 A1 ~* s) Y) R: |6 M& H
i=0;
- D" v8 ]4 F# r5 ?! t5 v6 ] L
j++;
: M1 n% \- }) p8 g( i
}
$ _0 G# X. B4 p& Z: T/ c& q8 L0 b
*/
2 X: ?" }2 r( B( Z
2 `0 K' d1 `' z8 X
asm(" nop");
; K' B2 m3 k: Y* i: \& U
6 W0 w! A8 l' j
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
5 U; y0 X* b) J
}
6 L; ]6 f8 z4 P. B( e- ]. M
: l# Z8 s. B) \2 o3 H
/*检查UPP传输的数据是否正确 (loopback modes only)*/
. J0 Y/ S; V: Q0 B
//UARTprintf( "i=%d\n",i);
; j/ n" ^; Z3 N; j% S. E
//UARTprintf( "j=%d\n",j);
; j* Y+ W0 n4 d g: @- y* d4 b7 I0 R) T
UARTPuts("Data mismatch in buffers.\n",-2);
- ]6 a. F) m! U4 l" [
if (upp_interrupt_count == 2 && upp_error_count == 0)
+ R# V9 P# j* n. r1 d- e r- ]
{
( h0 u) w V" i6 i* \3 g
for (i = 0; i<upp_frame_size; i++)
1 @) h" b d) a1 u7 f4 v; Q
{
' ^! U) P4 L+ W) Q
if (upp_buffer_a
!= upp_buffer_b
)
6 c" G( o) H& M. X9 K$ I- v+ U" @
{
" M0 j; s& f" D5 N( }/ f$ O
upp_error_count++;
7 ?0 Z# ?" ?' Y1 a( X; J
}
/ r! W! [4 w; X/ }6 e6 A$ b
}
: m; R @; w* }4 H8 w
}
, L7 ]3 m3 d# S. d+ j5 S. [$ r
5 f9 c" v X$ q4 ]8 ?- V4 |9 Z
/* 报告通信结果*/
9 B* k# n4 C+ j' H9 l- `
if(upp_error_count != 0)
+ s8 J; \$ ^( X
UARTprintf( "upp_error_count=%d\n",upp_error_count);
5 L: O4 |, a1 D4 ^' q2 _
else
7 F" q% I7 A9 {' N
UARTPuts("uPP transfers complete!\n",-2);
2 Y. |' k$ Q3 J- D) z/ _/ z
U! i7 a# K& y3 o8 W$ y6 y3 n
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- N: r2 A6 k1 [; H1 J# u; v' n+ F$ R3 b3 j
UARTGets(ch,2);
" O+ i2 t/ k& T1 i' r
UARTPuts("\n", -2);
/ |/ ? \8 }1 @/ ]7 `. p- z+ s) I, h
, w }8 O8 |1 R
if(ch[0] == 'y')
3 B! J" g3 o* C
{
1 ?1 e+ R+ O# B ?! `
/*打印全部读到的数据*/
- A2 A. E: R3 Y$ Y
for(i=0; i<upp_frame_size; )
+ S: G, H( _% a( X {% D# q+ B
{
# h) z6 @9 D. W& \# H1 \4 `
for(j=0; j<5; j++)
3 s- @% c9 V5 M+ f4 O
{
% X7 j" o! A2 A. j3 v1 D
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
( h. m. G- M5 E
i++;
. V. C& p6 X U: @4 A
//if(i >= 4096)
+ b# `' m, u! i2 u
// break;
" r0 U% ]) G; s- l9 N
) ^- Y7 Z, q2 k7 [8 p/ v h6 u
}
% n1 z; ~+ P% s8 N' [
UARTPuts("\n",-2);
q r" h7 B& e' ^
}
0 `3 B7 J6 i! I9 V) L
}
/ G% b" Q7 b4 |* W
4 A/ Z" A4 J l. U ?9 g$ |" c) ^' Z
}
( A! Z& A' s" B- _% `
% x# j* A3 ]5 H2 f5 y/ ?
q$ {7 C9 k( q/ e
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 M! u9 \7 D( J) r6 P
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
, T0 v. F5 Z+ M1 H" d/ u
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4