嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: j9 f5 V; O1 q6 c& o- m
Void UPP_TASK(Void)
& h) n+ v, e9 n8 W" Y# \0 V. ]. s
{
7 ~- [5 X, z3 ]* p& u! _
) X2 X; H/ _2 Y- |# \- ]! U( V( h
int i,j,k,target_int_count=2;
3 k4 j* }6 R$ L: ^; M; k* b
char ch[2];
# B( l9 l8 }: c* Y. _( ` @: H
$ |" e* o% S0 A3 l7 Z0 P
8 @0 l+ F0 C2 Z1 V( [
; }5 r3 J, W# _3 r4 T) a5 D% H
upp_interrupt_count = 0;
7 u' d, T% s8 z2 O8 D" [9 X" o4 b
upp_error_count = 0;
) g( H1 W# S+ V" _
% m0 V3 n. d, V' k% i
UARTPuts("\tResetting uPP buffers...\r\n",-2);
, b* \8 J/ \& m
// Initialize data buffers
3 M, {4 T' `7 ]4 {* D- d" {" x
for (i = 0; i < upp_frame_size; i++)
& U" w" b1 z& L
{
1 @' i% x( A0 R1 f' Z: y
upp_buffer_b
=i;
; v3 C2 M* C' N7 [
upp_buffer_a
= 0xDEAD;
9 A1 ]5 u+ R3 L* K; Z
}
! q2 V3 P9 m2 [
# e% t: f" b; n0 L5 ~) C N9 I
//for(i=0;i<1024;i++)
0 n8 v. X @& E( t" O6 r
// temp
=0;
# |% F3 h$ O& E" M; D; f
( W% ^, x1 K# B) C* D+ z+ d/ J/ ?
//UPPReset();
) _ _$ A, g' E. B1 r* g
/*启动UPP DMA传输*/
4 f1 j3 Q) m# }" T$ D, C
UARTPuts("upp_prog_dma_i\n",-2);
% D+ c; A& @2 ?4 i
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ w9 Q* [3 c6 x. j8 S8 M6 {
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 E1 D+ D" ~9 O# e
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 q z2 r# P0 b: X: b9 f7 b
: @$ a5 g0 }( a, X5 k) y1 \, x
UARTPuts("upp_prog_dma_i\n",-2);
" k" @0 t) Z+ w) D
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; z- q! ?- |- s" A F a/ u( H8 ]
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 C# k& H( |; j1 }/ k2 X
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
) _/ M9 r1 t3 Z) d+ U
" _* X* G8 J' I; ?& b: z# ^3 A' O
/*等待UPP传输完毕*/
$ Y4 [: w& B4 G0 Z# T/ r6 U" O
//i=0;
0 ~& m" c9 H1 ?. k2 m
//j=0;
]" _* Y% D, _, R' S" O
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
! S9 {( {4 g7 O+ G2 B
{
# {! f# t( V9 E
/* 测试UPP传输的同时操作普通DDR数据
8 ~5 `4 t, D5 q; G' @
temp
=i;
1 \0 ^6 Q2 B# z* p) P
i++;
2 n( r+ Y6 Y2 q. l
if(i==1024)
3 d/ h/ w' J7 J$ ~2 [! O
{
9 l$ F4 @$ B7 g
i=0;
9 k: S& B. j# a& D0 V R
j++;
" e1 _4 O: X$ U3 h0 l, s; s1 n
}
; E8 w% H' C& J7 B* U
*/
- l l5 V+ s& f) [, x
$ d6 v0 J8 \% ?" `/ ?+ N% |! Y0 V
asm(" nop");
& u' L% D1 P1 [9 g3 H
& O. u" T) T, c$ `
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
' `( I, u$ r0 p% x4 `8 p
}
2 n; Q) i0 ^4 u* D# E
E& m9 v$ H4 k( f2 P7 u
/*检查UPP传输的数据是否正确 (loopback modes only)*/
; k& P# g' j* t- Y' J3 z
//UARTprintf( "i=%d\n",i);
2 v+ Q' [9 e, v. O3 e8 D4 l' r
//UARTprintf( "j=%d\n",j);
/ Q+ a# m( l4 ?" F) v
UARTPuts("Data mismatch in buffers.\n",-2);
" K0 t! `# k7 N
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 a6 g# v N- b7 t0 J
{
+ d4 Q" n: t* S7 z
for (i = 0; i<upp_frame_size; i++)
: L k7 d% p# R# c; D: `
{
" i. b: z( h( ~8 {
if (upp_buffer_a
!= upp_buffer_b
)
: W) c( z/ Z6 T+ T. k( i
{
% D5 v* i/ d5 ~5 p5 N- L( l0 v$ y
upp_error_count++;
/ X3 L% }* ?7 B6 H" ?5 r+ v* X
}
9 R0 e$ ?, \4 C9 z3 _
}
2 n( q7 m' v. I2 q3 D
}
, J$ l& G4 a, }
: C* K$ n6 f$ v, k2 G6 J2 h
/* 报告通信结果*/
: r" e. n! ?% O3 \. G0 V6 n9 ^0 E
if(upp_error_count != 0)
: s# L0 Z, x6 ~" R# `
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& f8 f1 i9 M8 R2 D! N
else
8 v2 q/ x; C1 h* v
UARTPuts("uPP transfers complete!\n",-2);
4 u! t8 G2 j: I2 b( X( N5 n
; c7 d) O7 T+ T1 i f7 U" q' t% G
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 v; x( B" g* n2 T e# ]
UARTGets(ch,2);
& L' @- B# _3 ]
UARTPuts("\n", -2);
" s4 Y- U/ k, H
1 p/ D# y' }, x- d: t( F# a
if(ch[0] == 'y')
; {( ^6 \0 D* D! f( p# U3 N d
{
+ x, n7 L" v) Y" E4 M
/*打印全部读到的数据*/
& q, e( H# {; {! F: m O: D
for(i=0; i<upp_frame_size; )
. y* a$ I; X' X9 s) l- g) ]# m
{
7 c1 U( V( h1 J% w7 C1 K, w" Y
for(j=0; j<5; j++)
9 {, U8 ~! c* K
{
0 k" b& t! ]5 m
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
3 z, e: d+ `1 ]
i++;
4 B- Y- d( I3 Z
//if(i >= 4096)
/ y' c& _# @; u9 H# w/ g5 ?
// break;
! v, y8 p" }/ ]/ {2 T2 t
( D8 [1 Z% B! K9 [) `& L# b
}
5 U+ L, e3 a7 ?7 ~
UARTPuts("\n",-2);
$ l! b* ?( h1 t7 d T" L5 I
}
; _! {9 o9 c! s% Q4 S
}
3 k; ?. d" r( X7 E5 t) \# @
6 A# q; ], h1 H& `5 z% ?
}
' a" `. L; z* g
0 R5 M' g9 Z! q& ]5 n O9 [$ R
n9 J( r- t) K- q& w4 n/ M
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: u [5 q5 Z& |5 Z* V) E
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' O, i% A% k& Q9 Y. Z j
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4