C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6662|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
/ Q1 y9 k/ K5 _: T" ?* {main文件:
1 P/ d+ b2 i# ?7 G0 c4 ninterrupt void interrupt4(void)  
7 P+ S" B8 u# u1 _# @{
9 G& Q0 A$ i# w6 x; o  Uint32 sample;
3 Q% b+ b: z) \: {5 Q+ N, D: F1 J, P5 z: Y8 f$ M7 p+ |# w
  sample = input_sample(); // read L + R samples from ADC
$ n. Y( e4 u, y  G+ J  output_sample(sample);   // write L + R samples to DAC . p5 z8 u7 A# I. O
  return;
4 R, `( t) X6 c0 W}
6 @4 p, ]7 }: L% y2 z& \2 U1 P( A1 ^+ a9 N1 ^2 G
int main( void ): x, x! I; w' v: @; R
{
- h3 ~6 p/ M4 B$ d- q, U
/ I/ l  I2 ]$ O0 f& F# x+ z    /* Initialize BSL */
( I, ^8 i5 i+ I8 S    EVMC6747_init( );1 t; V( b7 r/ h5 @5 p
        /* Call evmc6747_intr function */
7 |. h% M1 h' B' o7 u    aic3106_init( );
0 E: a  c& a/ z) {' g3 D        while(1);* r' L# ~% G( a; t5 h( \* N" q( W! G
}
8 Q/ n* c+ Z" S5 E5 c" |) D" h$ H2 u1 c' ^+ k- C
# Q" [4 u' i- F2 H
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题% K9 n$ N; t9 Z0 w2 Z5 u
/* Initialize MCASP1 */
. t) x2 A% ^$ ^1 {    mcasp = &MCASP_MODULE_1;! T) m. G: f8 s1 j: T
    mcasp->regs->GBLCTL  = 0;       // Reset3 x. }  O6 s$ i0 F
    mcasp->regs->RGBLCTL = 0;       // Reset RX( e9 C9 a) V7 n) @
    mcasp->regs->XGBLCTL = 0;       // Reset TX
( q( ?& a1 r* F- H8 P, _, a: e( {    mcasp->regs->PWRDEMU = 1;       // Free-running
# f) N* v6 ]3 W# j) ~: u, c   // configure McASP0 receive registers, \6 W5 t7 X& A+ D* |6 g8 _
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 V' b" `% E% B  k+ `    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% _2 Z& o  g5 @7 ?0 d. f( B    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ R1 U* P$ y: ^: a. B9 t7 u    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 b1 i, i) O; \5 c; y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
- r( S- }1 @1 i8 O' I5 \! @4 M    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
/ r* a, m9 q! s    mcasp->regs->RINTCTL    = 0x00000000; // Not used. |% P& F' [5 q* O
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" k% R: F* D) R+ X* p6 Z9 ?

8 Z! E% V8 U" H6 y. h- ?% B2 k    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- c: E3 h* h3 [& M/ }! G
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  ~  d, e+ p1 W2 W8 u, d
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. Y' d# h  i' i/ T1 o7 z  [    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 s! H6 X- j7 O8 m( U' _    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: }! R0 T2 Y* e2 w) [& `    mcasp->regs->XTDM       = 0x00000003; // Slots 0,16 y' _1 r1 E+ ~! B
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit' Q% G# V' _1 L- k
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& k4 m$ y7 o0 ?3 L  a) p; Y$ i- p& {- n, v! L- p
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ N6 k- B8 z, K+ O1 l& y- ~    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 _. |3 S0 e& r9 g( A7 [1 p( P1 t( }( a  Y
    mcasp->regs->PFUNC      = 0;          // All MCASPs
  ~0 @' m& |% R" m7 M( H    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 J- ~# c& h+ Y2 O
2 [# m( [4 L3 {    mcasp->regs->DITCTL     = 0x00000000; // Not used5 i( N* c- \/ ^, T6 S( d0 E' w
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" [* c5 }6 j2 ^9 D" o7 S; |6 e  _  _    mcasp->regs->AMUTE      = 0x00000000; // Not used4 G/ V9 x2 m, |6 L; g' Q
& v9 M+ T! G# @* C7 b" Z
/* Starting sections of the McASP*/* c7 F* i; y" ~+ ?4 g. C  k3 U9 @
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 t0 a7 J; F  m9 y3 D0 c6 g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - u, I. l) \9 h1 O$ L+ @
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 8 t  _# l6 ~0 l% K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 C$ r5 _4 y5 j1 |7 T% w2 W' I8 S/ h$ y7 A$ W3 J
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; B1 |3 w' t7 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) [* M. v$ b5 H- X2 {0 g
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + c8 V- |% O, `2 L) |3 b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ |  J( V6 ?0 S) _, r1 F9 o

1 f* s: e6 ?. {) @& X. ^  w    mcasp->regs->XSTAT = 0x0000ffff; ' Y; h! @! ~  {* m% `3 D4 g5 u
    mcasp->regs->RSTAT = 0x0000ffff;
: p. H: Q" T( |3 t3 A
1 J: `  N) N- Z# g; G+ @    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 o: B) o/ R7 l/ ]  k# c4 o# {. I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 H( S% A% L: O. B+ J# V    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
. g, C  v1 Y! ?# `9 F8 V# s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 ~! [: R+ V9 ?$ Z5 V6 S
4 ]' A+ c3 H. @7 i( P; H, \6 y    /* Write a 0, so that no underrun occurs after releasing the state machine */
: ~  o+ |( @( W; h# ?! q7 |    mcasp->regs->XBUF5 = 0;) E7 N' D. \  Q6 s
    mcasp->regs->RBUF0 = 0;
, _3 }6 Y6 n7 C" v7 k+ F
+ I8 d, p3 M7 F    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! k/ _2 R. K/ }+ S' k! k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
; \- _4 ?1 j4 c    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 z. E/ h8 r2 P' I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 a8 F3 i% B0 z9 U1 M! @: ]( X' v! F- V2 z8 j' `3 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ h! ~  o0 D9 @! k7 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' X7 a5 d+ ]. D! G) m+ z% t
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 H+ l7 J' @6 o3 ^8 X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 N) a: _6 e( H0 y6 X# h
  i; J) U& y0 Y8 |$ j/ S
    CSR = 0x0000;
4 m( V8 U- m# ^    INTC_INTMUX1 = 0x3d;: |" C+ X2 x, X2 @
    ISTP = (unsigned int)vectors;. [0 b. N# B! K0 h" S
    ICR = 0xFFF0;  
% l- A2 x; K, S' g7 h! S; A! }    IER |= 0x12;  ! \; H: ]0 G, v! y4 Q
    CSR |= 0x01;  ; ]( j% |9 c& W$ y

, T* W& D! J1 y3 Q$ [, q- I
# q$ i6 ^2 l3 ^
8 |# L2 s, r( Y% n2 q1 r还有就是两个输入输出函数:! t% g8 c6 ^) R. h. w; j* {  q
void output_sample(Int32 out_data)' x  ?, N& e+ b+ U5 Y
{
1 \5 Y) O6 ^' h  AIC31_data.uint = out_data;  " j- w/ b5 R# y/ s' L1 U1 y
  MCASP1_XBUF5_32BIT = AIC31_data.uint;# m$ I, M* W4 ^0 B
}/ g: n- M0 E* c. U+ R" ~. e

+ T" e# l% D2 LInt32 input_sample(void)9 @1 U$ y* d8 d) ]8 P
{  
( K9 ~9 x! B( d4 s, _" W  AIC31_data.uint = MCASP1_RBUF0_32BIT;* |! h' T# g. g: g5 b& ^* \
  return (AIC31_data.uint);9 e6 T$ `! v9 T$ `
}
8 U( H0 z! u* I$ m+ m  q1 H
2 h4 [: D* i1 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-29 08:28 , Processed in 0.041885 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表