嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
$ P3 `0 l$ k% c3 |, ^& O
Void UPP_TASK(Void)
% ]4 f! D! V# C& x: E: v
{
8 Z. c2 e8 U# G( s! o5 L3 G
- Q- e7 }' c) X( C& ?% P
int i,j,k,target_int_count=2;
( h! A1 |) g2 ~! x& Q {% N9 \- A- [
char ch[2];
5 `, k' e2 N g) I. T
9 C3 V7 j) n. P4 E6 }; ^4 R$ p- H* ?
p. {' c) g- @) t) d
3 ]3 B f5 g, U! I2 t4 ^/ F$ c
upp_interrupt_count = 0;
! P: M6 w& Z' y6 y# s3 N
upp_error_count = 0;
3 w, P s n3 B9 s
h \% Q% T) c' R
UARTPuts("\tResetting uPP buffers...\r\n",-2);
" c" M" f% ~ w, r! _5 }# ?2 }6 e
// Initialize data buffers
6 b& i5 z8 M: ~1 W8 T n" B
for (i = 0; i < upp_frame_size; i++)
* R/ |5 U+ ~" W9 r$ \; ^. i% J, M
{
+ D/ I2 o# @7 R5 }# x
upp_buffer_b
=i;
& K. U @5 q, |& T
upp_buffer_a
= 0xDEAD;
5 v0 [! P9 e- ~3 h* r( T$ C7 j
}
2 }1 V2 R* M6 K& A
' s# m L, Q' m" R0 C
//for(i=0;i<1024;i++)
S- x5 i- t3 s6 F
// temp
=0;
; ~" g5 z6 ?* L {. t
+ U, K9 S* P& {4 {
//UPPReset();
: N+ ^; }9 o$ s( m" I4 P# a# y
/*启动UPP DMA传输*/
2 H$ } P, e A) A f! @- }5 R
UARTPuts("upp_prog_dma_i\n",-2);
# s- i* A! n: F7 ~4 C. ^
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 S" V: s0 \; r0 p
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
) K/ j2 `+ \) c
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 ?& t0 ^; p8 H3 b; K+ L2 N
' V/ f! Y2 H) m& G( P
UARTPuts("upp_prog_dma_i\n",-2);
6 S1 Y! O: U' j/ ?, m
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; L2 O" c) r5 p( }! e8 _2 e
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 b4 c# F7 C. [
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
. X% I3 n2 m0 e
0 N W1 Y! x4 Z9 [' c; D+ e* }
/*等待UPP传输完毕*/
( W& d3 @& c# K0 N( X" B
//i=0;
/ l. }; B( U. S4 l/ }" y/ J
//j=0;
% ^" n' u( N& Z7 K# w; ^
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
5 D9 e+ q8 O+ L6 C
{
& v# ^) ]4 j) a. M
/* 测试UPP传输的同时操作普通DDR数据
7 y1 A) B. S' W
temp
=i;
2 a5 C0 G% m* @- ]) w, y
i++;
9 y! M9 R' W! t7 s
if(i==1024)
( k3 H" z. \( V& X! E* D
{
6 ^8 D D1 m0 f3 j" w3 w/ w
i=0;
, A2 `1 Y$ S X ?
j++;
6 ?' U: I' o' y
}
* E' L' K$ [3 W* p5 Z: u" K/ |0 C
*/
9 }! t; S% x/ }9 b0 W7 Z
! }- q; ^+ v; I) @
asm(" nop");
: I/ j4 Q, y7 q3 k8 W
+ l* l: A- W$ I+ v* d- q
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# T$ ?7 o; `+ C
}
$ e" Q4 e- F# D& _# v# M, f* W1 e
# t7 n9 Y: K, f9 i
/*检查UPP传输的数据是否正确 (loopback modes only)*/
% u4 X+ p7 Y% H6 A( R& p" u0 I% H
//UARTprintf( "i=%d\n",i);
) l" c \8 z9 x" h7 s
//UARTprintf( "j=%d\n",j);
: |, q s- @+ h
UARTPuts("Data mismatch in buffers.\n",-2);
5 ?6 y! M/ I- X' K
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 W; ~. l q+ L; g, _4 B
{
) l* Q5 @" y& P% C# P& J# x. Y
for (i = 0; i<upp_frame_size; i++)
+ \1 D9 C- a1 _4 J/ W) D
{
7 i; D, t9 u& H! k8 ~
if (upp_buffer_a
!= upp_buffer_b
)
9 f' N/ |# U( |- H
{
4 g" d D" P3 P- y6 O e
upp_error_count++;
Y" `: [1 S g7 I* d% }6 L1 F
}
3 P! x I: a" s9 m. z+ z1 s
}
1 \' `! p G( i7 s7 s" b+ n
}
, `. y5 b1 }. b# G
" i* v/ j0 v: `9 ^
/* 报告通信结果*/
5 k y; Y; |; |5 A" i
if(upp_error_count != 0)
: p4 X, D5 e1 T) ~+ y
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 T/ `, \1 i' T% n2 T3 s
else
! e- v2 f ]: l# a8 y4 I+ l! R
UARTPuts("uPP transfers complete!\n",-2);
) N9 M* a9 Q) f/ x" J7 e3 G
7 t' N7 a5 \' r9 s+ U
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; c$ T8 V" Z% u& i6 `5 w; R
UARTGets(ch,2);
: X& S& U5 R/ g9 B5 j3 d' q
UARTPuts("\n", -2);
0 X! A/ F. |. L7 b+ |) n0 s& u0 e
/ `2 Y" z7 x8 D i! i) Q% h& A
if(ch[0] == 'y')
' O5 S2 q$ {7 Q: i4 ~, t* v
{
- N6 R0 P+ M1 ^
/*打印全部读到的数据*/
) r9 a' N* V, |
for(i=0; i<upp_frame_size; )
5 L; K* n2 K2 F* u! u! `
{
5 o+ @& _2 _( g3 B+ O, B) D* k, D
for(j=0; j<5; j++)
* V1 r- K; b) h9 b% a2 Q2 J1 s
{
( Y5 j, C# K4 ]0 C, A- j
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
/ g8 C/ s5 Y5 ]
i++;
% a8 J# ^3 ?& x% ]
//if(i >= 4096)
# h' ~1 I2 A* Z4 T. ?* N6 d
// break;
4 y0 h, C! \9 f6 Q6 ~ @
: ]2 G" H E4 ]% l7 @
}
. ~" z/ x9 J8 p) i4 j
UARTPuts("\n",-2);
+ d/ t$ Q% m3 M; P
}
% p5 d4 t: x- s/ o2 i
}
3 q: n; `) c, F4 t' d2 B. L6 ~
' V! g$ F3 f+ I- @) n+ c3 i; X; y
}
* f9 Q; Y. b0 t1 `: H B3 p9 f
, [/ T7 _$ W+ M* S3 F
" r9 g5 S+ W2 b
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( K+ q( `3 j5 x- O* |
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
- r4 A4 K3 i1 z$ c7 H
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4