嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
% h7 i1 s% o' J E2 L: N' S1 e
Void UPP_TASK(Void)
6 V) u8 b# c9 r8 c
{
( T, o; c; b! ~1 X: m: L8 X
. q# j* R- u) B3 U/ ^3 N4 r
int i,j,k,target_int_count=2;
: b* k* ~: q! r: c+ U j8 ~
char ch[2];
- m; i" b6 K9 p/ b" E i. F, A
9 Z: s5 S. {: _' @3 U; V, x- \9 I% H
* R5 g0 _' ]/ o4 t
+ r/ F7 z; h0 c& t
upp_interrupt_count = 0;
5 q! y, t* v5 ?/ M6 ~
upp_error_count = 0;
2 D" s1 B- y" [( V
+ H) H2 Z4 q! l1 J/ h1 a3 |
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 M$ Q3 l, C* |+ ^
// Initialize data buffers
8 l3 H+ f$ H; M! ~! |( o' R$ P
for (i = 0; i < upp_frame_size; i++)
4 ^2 V' F4 A& ]1 D- E
{
4 e ^' V" c* d8 b9 i
upp_buffer_b
=i;
6 l1 f) b2 O9 Q( |7 `' b
upp_buffer_a
= 0xDEAD;
1 }% I/ n P9 S5 x; Q' {
}
- ^- ]" n% I5 D# Z$ [; f, _7 x9 J
m, u) L" {/ M( I/ \; q9 K: I
//for(i=0;i<1024;i++)
6 W8 m1 N/ \/ z; `3 V/ l. }4 X- {% j3 k# E
// temp
=0;
N$ v( M* `( G5 v6 ?) b
5 _% F8 C$ }3 X$ s# |2 j
//UPPReset();
1 W" p- C$ i9 |; `- i4 X/ `
/*启动UPP DMA传输*/
% W8 i: D j$ E. X' {
UARTPuts("upp_prog_dma_i\n",-2);
! E! s* x: J% w( T6 ]* G8 _
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
1 y( O) d$ O, m6 k0 U/ U! j& y
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& x7 N$ h1 F% v% o
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
$ o; E! B' N# |% z+ X
6 T% t" x# b; p+ z$ `3 ?9 b
UARTPuts("upp_prog_dma_i\n",-2);
# {$ p7 b* W* V( e: M# q
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
/ y2 O1 N4 A8 p9 b: \
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
4 o+ J- ?" H5 n5 L: @2 z
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
; e w3 e% S( r; w/ H- G3 V
9 a6 v- P4 a$ }
/*等待UPP传输完毕*/
: U* n5 e3 k) H) ^
//i=0;
7 I: i$ K g- ^7 r1 x5 `$ a, h
//j=0;
' J# C! |( w; T1 y7 q1 W2 Y
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 X* W& C$ D9 O+ p' G7 ?+ m/ @3 F
{
' g+ S* q5 L( m3 n3 e/ o- D0 G
/* 测试UPP传输的同时操作普通DDR数据
! e; k+ E2 L9 u3 p+ |/ q
temp
=i;
9 V4 ]3 a0 M5 v0 f: O$ U
i++;
/ R4 ?) i7 L/ [; Y3 r( u
if(i==1024)
2 Q1 S" `- ^5 q
{
3 ?) `" \. x# \2 T1 S
i=0;
2 A2 T a: w, C+ y6 i
j++;
- N- ^0 q; v3 d7 ]
}
8 _( K0 i4 \5 \1 |& B- R
*/
7 |1 I6 X3 C! c, r' [; w9 @/ B
' r0 T+ W" W) d6 u- C$ [
asm(" nop");
) @" L3 w+ y' [. ^' P* e
! {! V8 h9 G' t7 m" j/ o0 D
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( ?! s+ E& j: w9 N
}
9 O7 f h0 J/ U
: k* @. m' E+ _
/*检查UPP传输的数据是否正确 (loopback modes only)*/
M& N' k4 D' L/ z Y
//UARTprintf( "i=%d\n",i);
; R! d p' o% p/ j' w8 c% L
//UARTprintf( "j=%d\n",j);
# J" }- F: i: _' e
UARTPuts("Data mismatch in buffers.\n",-2);
, W; x( Z1 k7 \9 I9 X: i
if (upp_interrupt_count == 2 && upp_error_count == 0)
# K! b* ]! ~2 ~( z5 V/ B& e2 O
{
' I7 h2 E! U2 _6 V# b
for (i = 0; i<upp_frame_size; i++)
, P+ h# a: t9 o, F" N! ^: D
{
- G, P8 ]* ^7 y# ]1 b; ?6 _
if (upp_buffer_a
!= upp_buffer_b
)
8 e) |* A: Q. r9 k
{
$ I4 g4 D* N t( _& Q' l% l
upp_error_count++;
1 h' G, Z/ D8 H" |4 q
}
8 y1 |* y3 M, S; M/ [$ u1 z
}
. d4 }4 A8 G9 A1 u9 k4 H7 T" t7 x
}
1 N) j3 [. ~- V3 {1 J
9 [5 f. e4 W& J y: N! j9 S* [
/* 报告通信结果*/
9 ^1 a$ L- w# H( L7 U
if(upp_error_count != 0)
) H% m- N2 D& h/ N
UARTprintf( "upp_error_count=%d\n",upp_error_count);
9 D5 x$ A3 R$ I
else
6 @; h' n# V3 U
UARTPuts("uPP transfers complete!\n",-2);
( o" W) o( K$ _+ j2 H
6 Q9 y8 c8 S, \& m& g$ ?" Y
UARTPuts("Do you want to print all the data?(y/n) ",-2);
3 o% D& v5 B0 K4 B
UARTGets(ch,2);
1 [+ n2 k1 x" t# m0 G; J
UARTPuts("\n", -2);
- s! {" v/ \4 q' C. z4 }& q- b! ~
/ ~9 G/ _4 ~9 |; i
if(ch[0] == 'y')
- W# }- D3 {0 i) j( E
{
$ l/ o. O! Q0 I& _2 g }/ @- @5 b/ H6 U
/*打印全部读到的数据*/
! W4 d) |2 p3 F7 F+ r9 d7 u# `
for(i=0; i<upp_frame_size; )
; I5 R+ k. b) \/ l/ B7 G
{
- Y: Z6 I' i6 |3 y h+ }
for(j=0; j<5; j++)
9 b2 O; G8 h1 @" }7 x2 Z3 _2 u
{
4 h. L' G% s; _" r' K& o
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
* i3 Z6 ]1 {3 D- [
i++;
6 v4 I% k& R/ E, E. z- w5 c
//if(i >= 4096)
B! V' T# f$ a% i' a/ g
// break;
' h# K1 s3 k5 ^% I) b
* B P0 ]* A5 e9 P9 m( I7 o$ f
}
, ~# }- H6 a7 x: Z$ U$ c
UARTPuts("\n",-2);
/ q1 ]3 R8 N: h8 G: T8 [
}
3 d# S5 B$ ]2 n9 T2 i, i- L
}
' w* u, g( F, v7 t/ C
* o1 n9 M8 M, w# a% X/ I, \; T
}
" d6 E" R7 f" K. `8 u. j: s
/ j! d* D9 B2 _2 ?2 _/ z& T2 M% E
9 q3 I! o" a+ \+ _8 `
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
* A n {' x" `, h, ?
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
. r# [/ Q! N4 G, o0 c$ l C. b! W
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4