C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: P  m3 [9 m* ]+ {9 ^' N
main文件:+ Y+ J7 G. Z, A. d. g
interrupt void interrupt4(void)  7 V  V2 x: Z; C) o; Y
{
& g) F& D% |$ J/ D. {3 F* O  Uint32 sample;) x( R$ S) n1 q# f4 V

/ l+ @7 y) w- {  sample = input_sample(); // read L + R samples from ADC
" _: X! k* ^8 L8 F! R8 D0 O  output_sample(sample);   // write L + R samples to DAC 5 @% L9 H0 Q2 N9 h
  return;" k3 ?" |7 d0 K& \  y2 [
}
% }' @8 E! Q  ~; M
8 p3 m* ]$ ?# \( Yint main( void )
, q2 m3 u9 ]; `8 l3 b5 w% e{& r( J7 l2 T! {+ ]1 A! Z
, i, Y- g/ C1 X: S8 X" E( ]
    /* Initialize BSL */
7 ~: a+ }- V" e& Q$ K5 j    EVMC6747_init( );  o" c0 X& E5 ?$ ]1 z
        /* Call evmc6747_intr function */  }/ C5 q$ a. _
    aic3106_init( );
6 h# e- P1 m8 u" f% ]' x        while(1);! O% \! K: ^% Z% x5 Y2 j
}
. y$ Y+ Z2 q* Y* X: ~$ f+ l) Y% V3 Z7 {5 m- t: w: A" Y/ H3 r- B

& U" O1 o  C" \3 J' naic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 p& m- C9 F) p9 J$ w/* Initialize MCASP1 */
6 Q* V6 `! H5 c0 f9 Z    mcasp = &MCASP_MODULE_1;
8 a6 E. I% V( {( s4 k    mcasp->regs->GBLCTL  = 0;       // Reset2 Q# `5 ?" G' A( q
    mcasp->regs->RGBLCTL = 0;       // Reset RX! Q  i5 v6 @8 @
    mcasp->regs->XGBLCTL = 0;       // Reset TX# x9 v) B% }. ]- f: t  o  M% A, u
    mcasp->regs->PWRDEMU = 1;       // Free-running! w* P- c0 `! m1 ]# i& D% z2 d% ]
   // configure McASP0 receive registers; C" z9 c, e) A  ~& X
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 V5 ^0 R; o! o+ a' }
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; a3 f" \8 ~- G- L" ~6 J% m    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ Z2 P/ h$ n4 y6 \    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ X" b9 ?1 q4 w, ?2 _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
. P8 Z( B! y( d; ^/ w    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 `* j9 C1 o' @6 u. p& T" y- Y    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 W& a9 O7 r9 \* t2 V; Z. Y- {" R    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 ^2 S3 E' m. S3 I- Y
- E! P8 n* i, n  s" r; o8 E
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
% d6 @8 L0 l+ S& `2 C* r    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 I7 ]7 K8 F/ ^! d( v6 G7 q2 R
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
; Y* t: B5 U& C- Q, f    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ m" D, k% D, e- I: R" I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK6 I) r# q) f5 b' U8 J9 {
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  K" M# ~! W+ Y! t
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% G; a9 t  x7 {) O- d4 y2 R. ?
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: D8 J& H) t% ]" d+ a0 u6 s: q
+ |8 i$ G: _1 v! k6 `8 O/ ?9 w
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' a9 M+ d$ c/ `! u, g! V# K4 g* c
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 {, t3 {7 r' C/ z9 L9 P9 C9 V
    mcasp->regs->PFUNC      = 0;          // All MCASPs
- W. ^1 P* W9 r" k: u) a" h    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 R! g7 Z8 z+ Q/ @
9 J4 ?% k/ K: G    mcasp->regs->DITCTL     = 0x00000000; // Not used5 K7 H9 C: \7 v/ m: v; c+ M
    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ t& t2 u4 C- k$ e1 |+ L; M' k3 m
    mcasp->regs->AMUTE      = 0x00000000; // Not used6 @6 A, f, E( @2 f" K$ O1 M
) }0 F: X! T: D9 i# k
/* Starting sections of the McASP*/
+ i) a0 V4 F* Q( V& O8 F5 D    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & K" f0 [% |6 T% |# j0 H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 _4 d9 u# Z! b5 Q* q' q1 J    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' j1 E# W) z! [6 Y$ h4 E/ `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& A! q9 T& F5 l+ R
' i' E  [* H- h5 n; q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* D* c, @% b+ b" u( u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 v7 M  s# }, {" n$ N    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - X- ~' @, v" \& S7 u3 X# Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 l1 Z) l9 h- m8 e3 B1 W
" ^" [) L; @/ b" y. }
    mcasp->regs->XSTAT = 0x0000ffff; 3 T: S: n, L: `  R5 e6 p
    mcasp->regs->RSTAT = 0x0000ffff;
. O( e8 S0 i& X$ L
7 g+ J' d# m2 h( W# R    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% l% h9 T% l$ y$ N3 j- H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; s; p* o9 w* r* K9 x' i6 m1 a    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 e* [( T/ h0 {. F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 F) w. L7 Y8 D# p$ T

) C6 F  a+ g6 J/ S    /* Write a 0, so that no underrun occurs after releasing the state machine */2 l" Y" L0 K; t4 ~# Y
    mcasp->regs->XBUF5 = 0;2 W# k/ Y: W1 s2 P* l6 {2 K3 D5 m: |
    mcasp->regs->RBUF0 = 0;
: C% f- B) H+ b1 U0 l) ~6 i: Z2 y: `! t# `" [" ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
  P) }7 Z' \) o. i) J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 {9 X5 r  A! D* ~9 m    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 C, G' P* v. S+ u8 o0 t3 k& A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: m- J% d. H% @1 Q+ n$ s  |7 C( s
' E$ O3 H) z. m6 t+ n) c    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + E# Q  G) Q+ ]8 L6 ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, L* g5 [% L& l3 m  n/ `8 S
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, |* P  c; r: U. v  d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 {: {9 }( s5 j
* G3 p0 n  F" S    CSR = 0x0000;
) j( ?3 d' U0 }6 ^9 {1 {    INTC_INTMUX1 = 0x3d;; t0 v9 Y6 P6 o
    ISTP = (unsigned int)vectors;2 g: z7 P/ D0 Q* t' Q; a" r
    ICR = 0xFFF0;    x! d& h/ ?- Z: u' [$ _
    IER |= 0x12;  $ f' |' n, R% Z( z( p7 W
    CSR |= 0x01;  
/ T5 W. ?3 A/ `1 d! V7 X8 M4 ?% j5 y: v. z1 |

& |0 @) P) C7 _( v  H- J/ a. E; Q+ A) o6 }3 y8 U) o
还有就是两个输入输出函数:$ T" B" O, U& H7 P; V' O+ v. h
void output_sample(Int32 out_data)4 n" ?+ T/ Y- Z. s8 n) |
{1 `: I  U6 B6 Y9 _6 G' ^% `, p
  AIC31_data.uint = out_data;  # T6 G2 o1 W5 v! v2 k" t
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% x8 e! J4 Q# r: F}
8 B8 y& ^6 s* Y' C$ q" m; d9 n+ r
4 [) }. v1 b# E! k. \3 m* z6 `8 \Int32 input_sample(void)' {, Y. f1 i' m6 E) g5 H
{  
: T) w8 v+ H% c; }3 C' t  AIC31_data.uint = MCASP1_RBUF0_32BIT;
  F9 S) [' N: A. T2 _2 R  return (AIC31_data.uint);! a/ U3 ]9 J! V0 w! n" d
}
9 j, N0 w& L6 S" T) R+ T8 f  k
) q' k7 f4 a/ o2 @( M+ C0 P6 V" \
分享到:  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, 2025-12-3 08:01 , Processed in 0.039238 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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