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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, ~, D4 M- M% l& N" L2 Q; ~# m- w: @main文件:
! l' g, y; s' c6 Z( w, [' [$ Z$ v. Qinterrupt void interrupt4(void)  
2 U" ~$ C) S! N7 K$ S* j! }& b{/ o6 z6 `+ q, |" Z, q/ v+ v
  Uint32 sample;9 ~# L# j2 [1 Z* m& g" h, t

/ X9 v- {( M( E2 r! e+ i2 K  sample = input_sample(); // read L + R samples from ADC: r; `3 |9 ^: n1 ~2 P  K# X) Z1 ?( X
  output_sample(sample);   // write L + R samples to DAC
1 m# j! ^6 r+ U2 a! z# @0 N  return;# w2 c4 g/ `8 \( ~
}9 ^: ^0 {7 Y5 G' \6 c
0 ~; `# g# M0 s$ N- `
int main( void )' Q) P& }1 P* M5 g/ G
{8 J8 z$ C) Q3 Y0 _
" J) N' }# W9 e  \( e3 K
    /* Initialize BSL */
' d3 _9 [! A" g# d    EVMC6747_init( );
7 \7 Y% x+ K2 C; u        /* Call evmc6747_intr function */
+ V  _) T4 c5 g: p6 i    aic3106_init( );! ]4 f$ I! p5 Y5 b
        while(1);; t8 h1 G  ~5 Z* ^7 e5 ]
}
) L. I: m  I" x0 R9 v
( X8 u1 p8 N! s4 b9 E; S
1 S3 d3 \6 x, p: d6 }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 G9 F8 j% V: s! v! K/* Initialize MCASP1 */
" n/ A9 G  J5 M    mcasp = &MCASP_MODULE_1;
8 _1 y  G" }1 e+ X; y) l    mcasp->regs->GBLCTL  = 0;       // Reset
- o+ P9 d0 h: b    mcasp->regs->RGBLCTL = 0;       // Reset RX
% [" ]5 q, @% g/ g    mcasp->regs->XGBLCTL = 0;       // Reset TX  G! l* ^& y4 I2 H) e0 G1 q8 B7 ~
    mcasp->regs->PWRDEMU = 1;       // Free-running+ W( V7 \8 x5 s6 ^" r2 A
   // configure McASP0 receive registers
: I. t4 u9 [* n4 X    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used! A" a) z$ i0 ?- a; u) K
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: b1 i( L9 p" I
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& G2 z5 v# j; Z" G: @4 n    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; O# l& e8 s3 f6 `  F6 |# U; U    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)2 n# w% Q& A1 l$ ~; h
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 s9 B1 p, h: a$ P( v; ?, i, U+ C    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 |" Y2 @3 s5 z3 s" {5 H& b) _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% ]: z; I. i+ Z$ b0 E
2 [0 g8 x4 Y1 B) g9 c2 R    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
: m+ @, |: L0 k  m    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ L0 A2 t* p' Q( i+ `9 H    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 m% Q) r; H. t, J6 f$ `8 H    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: w1 y8 m# G4 q' M  U
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) ^0 L# g4 H1 }0 N8 W6 r    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1- K' ]8 C5 S$ a' m; _; R
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
# E% N3 l! B: G2 G  g  H8 c# c2 D0 O    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- Z- i& s( T6 ~2 y: ~, [
& ^6 a& O0 C; A
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 H$ k5 S, S0 q) y- c
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; [! E% `& ~( u0 ^/ d7 m' L) Q
    mcasp->regs->PFUNC      = 0;          // All MCASPs
' b4 T7 R. l6 j# t; c    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ j8 m* }) c$ p# `5 E
% H- z, S5 S6 [0 V. w5 _" V
    mcasp->regs->DITCTL     = 0x00000000; // Not used
) s! K* v* Z  W& y* U    mcasp->regs->DLBCTL     = 0x00000000; // Not used
+ ?6 t! b& N9 c0 ?1 Q* p    mcasp->regs->AMUTE      = 0x00000000; // Not used
' w$ N4 E$ B3 U( S# k- z8 `" \) J! w9 h
/* Starting sections of the McASP*/0 Z9 l% ^) N% \& b. O2 \
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 F7 P& z: s1 u- D5 Q2 s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
$ w  A9 k0 x- \, k% E1 I1 X$ H7 S    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- V, r& e. r3 C4 f6 N& a$ |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& I, c+ e, _- u6 T6 V1 C" z
: `6 L+ o! A0 X- A
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + a! ~- ~3 \6 l+ O4 W% e* Q# Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 p- L& L4 P+ S' t& W: h
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & u& A$ F! R' a# F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 l, Y+ v8 ~! d4 \6 R. j5 y
6 a  m: }1 L1 D2 R9 u4 ~    mcasp->regs->XSTAT = 0x0000ffff; 1 u1 k7 y& z2 J2 f
    mcasp->regs->RSTAT = 0x0000ffff; + Y8 P8 n8 j' ]9 G1 L3 A( z# G
9 V$ V. z1 {9 G5 N  i0 b" x) |; t
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 ~, n8 R$ j. c+ M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
2 c: _% l0 {; ^; r1 {    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / [& v) w- z) [* x" A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. _& c. R- h4 H% ~# n& b2 L  k
1 @  z! A- J4 A9 V
    /* Write a 0, so that no underrun occurs after releasing the state machine */" J5 Q' r- b" P# k
    mcasp->regs->XBUF5 = 0;
$ V  t. U- G5 B& m, u    mcasp->regs->RBUF0 = 0;
8 r7 S/ s. u: H1 D
( |8 q& z* T6 Z# c- e    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ' P, ?; J5 {0 V$ g/ e! `/ c9 U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- X- q! y3 D/ H6 L* U5 F
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ @8 W5 Z7 `6 {3 w4 x- E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 s. k& ^/ l' I+ {9 j/ i0 j# ?; ~, }" z9 C) a
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 e: P3 q6 Z( p/ E9 f1 J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# u, m* c5 {5 f3 |5 ]( H    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# u/ s, y5 E0 z7 B1 o+ u- a% Z/ F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ N8 W  X; \9 ]' X0 y
0 P- r( ?. e2 l3 Q8 L  b% t    CSR = 0x0000;/ d/ E) {# G* q9 C
    INTC_INTMUX1 = 0x3d;
( s0 s2 L3 x& T: N* D' W' @6 T    ISTP = (unsigned int)vectors;8 `: o* G+ W: M( t3 U1 \2 K$ B
    ICR = 0xFFF0;  8 F2 h2 E$ a. A+ C
    IER |= 0x12;  6 v; {" C4 R3 O/ R, ]
    CSR |= 0x01;  
( g+ ^5 T! M) g" c/ m; i7 f8 J6 \3 ^  \

2 r7 V  O3 c4 Q1 Y/ A) v# O8 z- w  F8 e* W* F  k% r
还有就是两个输入输出函数:
+ `& E% ]# _+ w0 W) Z$ lvoid output_sample(Int32 out_data)* A% z* f# P  h, k' z
{
) |% J- f# v+ B" v6 {/ C) |  AIC31_data.uint = out_data;  
1 j* p, t0 P" }# s& E7 t  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ H. B6 r7 o& O* |}
7 C5 i+ U  q. P0 k9 a
. r, e# R% U$ `4 H' vInt32 input_sample(void)9 O3 l+ v9 _8 q: k- L
{  2 m* \; |- f9 h3 r. O
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; t. D0 i' M$ X* y  return (AIC31_data.uint);% O4 I, Q8 B. s
}
% V3 x' @6 d& b  I1 p  Y5 B
+ K9 _; O0 z* ]
分享到:  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-23 10:16 , Processed in 0.041613 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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