嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
0 ]4 W4 E/ Q2 Y; f2 R/ R g
Void UPP_TASK(Void)
* Z% P4 r% T3 Q; Y0 R+ N
{
' c$ }6 b% W+ I6 Z* T7 a$ [/ |
1 d. V6 @4 e( w9 k
int i,j,k,target_int_count=2;
/ P0 M; S/ n& G# ~: I
char ch[2];
: Z: M9 B: r7 P1 Q0 X
9 M! d, ?) @( l3 _2 a
6 H7 p7 k" K! q
" R% ?; u+ o( \5 ?5 r A
upp_interrupt_count = 0;
) V- ]( u% B; C5 H' U9 X, y
upp_error_count = 0;
4 Q8 F) g9 x' u9 z7 L+ t
% l3 \$ _( Z/ L8 S5 X
UARTPuts("\tResetting uPP buffers...\r\n",-2);
8 I, W1 |- C* e: t8 |; ^0 m9 @, Z0 Y
// Initialize data buffers
8 c; }/ K, O: }, {' q) {' g2 w3 H5 o( ^5 `
for (i = 0; i < upp_frame_size; i++)
+ g6 j6 ]# Y0 k$ w6 a& q
{
* [. L: M" h7 \# p) Y6 T/ T1 B( [: X
upp_buffer_b
=i;
7 v4 w7 m( M, O+ `
upp_buffer_a
= 0xDEAD;
. }% Q: x* S, J; B2 T
}
& J# `6 Q$ E( m- J3 A: E3 {& n
% y8 m* x, X1 I5 f- ]3 [
//for(i=0;i<1024;i++)
6 \: u' y9 S ^/ c
// temp
=0;
' M4 H5 C F4 [/ z, u* f
" z9 O1 ~, m9 K. B. |) j! |
//UPPReset();
$ N- V2 `& V, L; T( P
/*启动UPP DMA传输*/
. F3 K4 ~! g8 r
UARTPuts("upp_prog_dma_i\n",-2);
; A8 `7 _* E; t) E1 x
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 V7 @$ [7 @: x6 B
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
# E) x" @% q: F- h! y3 u
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- ~5 p! ~. n* M' V- e; F" v
$ l: }) G& j9 ~# S: J% M
UARTPuts("upp_prog_dma_i\n",-2);
3 O! [7 O: `" Y( H
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
9 i( ?+ o5 r/ n
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 s# C) l+ D w- p
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
3 ~: a& f. Q, m+ n. V n
5 U0 ~4 e" k# o, Z1 k: A, _# L
/*等待UPP传输完毕*/
" J: `( O( t: k9 H
//i=0;
! |" y1 x. ^ e; o+ |$ P- w
//j=0;
" l( z9 }3 j6 G
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
* R7 g) y+ H9 Q. V8 H- l
{
8 l/ Z; o& d, T$ } K" O
/* 测试UPP传输的同时操作普通DDR数据
6 Z! L& x* I4 O( M- ~3 x
temp
=i;
- e# S& z8 [' w6 S6 R j4 L
i++;
+ y/ t( a" r2 E5 X# ~. s) D
if(i==1024)
; w5 j" }0 Q6 m) U
{
' O" A9 h1 n2 ?, l6 A! b. x
i=0;
! l" i& c1 |) Q" n# R' R2 N
j++;
1 Y- U7 R; g; J+ P _5 Q
}
5 X. x+ C/ Q& o3 y4 R# w: K( D
*/
: `) n( V' W; c; V$ c$ }6 y
u$ w3 `8 W& r! _0 w' }
asm(" nop");
3 Q. T1 ^( M- J* I
& `# I' S1 C' v% h( M/ J
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
, |0 p5 D4 M s6 q) H2 ^, a
}
+ [) e, D3 m0 a u' I+ Z4 [
. F7 ?; k- r9 o! P- u" {* s7 _
/*检查UPP传输的数据是否正确 (loopback modes only)*/
' z6 {0 _- u. w5 O
//UARTprintf( "i=%d\n",i);
6 q( {: ?, R7 d0 V Q
//UARTprintf( "j=%d\n",j);
4 i3 I" ]# s' ] t9 ~
UARTPuts("Data mismatch in buffers.\n",-2);
5 H1 q+ K" N/ W+ z; U* }! f
if (upp_interrupt_count == 2 && upp_error_count == 0)
8 c6 i) c) |7 [3 G" e! j( a( J
{
& g, G- y5 |3 S0 M3 O) \* E, H4 H
for (i = 0; i<upp_frame_size; i++)
K6 p) m# T( @, J/ L
{
! ?3 \+ [7 d3 ^
if (upp_buffer_a
!= upp_buffer_b
)
7 p- Q! m8 }4 \
{
+ g- x1 g& _! \% k* N
upp_error_count++;
' |3 F- z" j4 z0 y( W- X3 H2 f
}
7 H0 S H" x( }4 ~' m v& o
}
. X3 b$ s h& J4 @
}
! o0 q6 ?2 m3 H
+ {9 }3 J3 D5 Q4 ^" s
/* 报告通信结果*/
' l0 B" T) o: ?
if(upp_error_count != 0)
" E+ d: V6 p! h/ q4 L
UARTprintf( "upp_error_count=%d\n",upp_error_count);
h) i6 L3 l, Z; K# Z* c6 q& e
else
/ g# U" o, w- z2 D6 o7 M
UARTPuts("uPP transfers complete!\n",-2);
% d! F$ |* A" c0 [
; I! |' J# Q5 f4 G
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' d2 Z4 e% g2 _" Y$ o! \
UARTGets(ch,2);
- l/ y& m* H% C+ o! J
UARTPuts("\n", -2);
; A0 i1 a/ B1 z9 w- [0 ~0 T" r5 b
/ p: t6 f( ~$ |; G7 j
if(ch[0] == 'y')
, S$ _% q: E0 g% F9 S3 s/ F
{
0 ~. G# s$ h& F) d
/*打印全部读到的数据*/
7 P7 t6 ? a0 [. X5 A c
for(i=0; i<upp_frame_size; )
% T$ h: S6 K/ K$ ]% ^: m
{
/ x1 N9 C9 r6 `1 X+ D
for(j=0; j<5; j++)
) K4 `7 G- C# O
{
( i2 i6 z' A6 Q4 _
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
% h( Y3 M, W0 ^; L9 A( s: D: M
i++;
6 M! [, n( O! F; t! K, Y
//if(i >= 4096)
3 ?5 g/ e5 { z# L9 A: M: f
// break;
0 Z& J; ~- C0 f/ V3 A
/ W3 x5 I+ N; v5 x% N
}
5 j+ b: z E: Z5 N3 M( ^9 N C
UARTPuts("\n",-2);
7 \* N2 O4 \% f8 m, r
}
' p% K" t7 K/ J5 i$ O
}
0 p6 @! m: e1 e) g& c+ H$ q
5 {, ]% R/ u( A# q
}
5 a# ~+ ]2 M9 ?! I
1 l$ B& d. x" l6 |
: b- j( I0 z7 B: Y! T
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
7 M; {! Q% s- Y" A. s% G) D* [
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
! t% C9 t8 T% T8 P8 U/ H% z
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4